1、树
- 结点的度:一个结点的子树的个数
- 树的度:树中各结点的度的最大值
- 结点的层次:根为第一层,根的孩子为第二层
- 树的高度(深度):树的最大层次数
1.1 树的遍历
(1)前序遍历:根左右
(2)后序遍历:左右根
(3)层次遍历:从上到下从左到右访问
1.2 二叉树
(1)第 i 层上的结点数目最多为( i ≥ 1)。
(2)深度为 k 的二叉树最多有 个结点(k ≥ 1)。
(3)在任意一颗二叉树中,若终端结点数为n0,度为2的节点数为n2,则n0=n2+1。
(4)具有n个结点的完全二叉树的深度为⌊ ⌋ +1。
(5)对一颗有n个结点的完全二叉树的结点按层次自左至右进行编号,则对任意结点 i 有:
- 若 i = 1,则结点 i 是二叉树的根,无双亲,若 i > 1,则其双亲为 ⌊ i / 2 ⌋。
- 若 2i > n,则结点 i 无左孩子,否则其左孩子为 2i。
- 若 2i + 1 > n,则结点 i 无右孩子,否则其右孩子为 2i +1。
(6)深度为 k 的二叉树有个结点,则称其为满二叉树。
(7)深度为 k 、有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 k 的满二叉树编号从1 到n的结点一一对应时,称为完全二叉树。
二叉树的遍历:
前序遍历、中序遍历、后序遍历
1.3 二叉排序树(二叉查找树)
具有以下性质:
(1)若左子树不空,则左子树上所有结点的值均小于他的根结点的值;
(2)若右子树不空,则右子树所有节点的值均大于等于他的根结点的值;
(3)左右子树也分别为二叉排序树
1.4 平衡二叉树(AVL树)
它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。
1.5 最优二叉树
给定n个权值作为n的叶子结点,构造一颗二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
2、图
图G是由两个集合V和E构成的二元组,即G = (V ,E),其中V是图中顶点的非空有限集合,E是图中边的有限集合。
(1)有向图:每条边都是有方向的,顶点间的关系用<vi,vj>表示;
(2)无向图:每条边都是无方向的,顶点间关系用(vi,vj)表示;
(3)完全图:图中任意两个顶点都有一条边相连;
- 有向完全图:n 个顶点的有向图有n(n - 1 )条边。
- 无向完全图:n 个顶点的无向图有n(n - 1) / 2条边。
2.1 连通图
在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图。如果无向图是连通的,那么边的数目大于等于顶点的数目减1。
2.2 强连通图
在有向图中,若对于每一对顶点vi 和vj ,都存在一条从vi 到 vj和从vj 到 vi 的路径,则称此图为强连通图。
2.3 生成树(最小生成树)
是一个极小连通子图,它含有图中全部 n 个顶点,但只有 n - 1 条边。
- 如果在生成树上添加一条边,必定构成环。
- 若图中有 n 个顶点,却少于 n - 1条边,必为非连通图。
2.4 图的存储
(1)邻接矩阵:对于一个具有n个结点的图,可以使用 n * n 的矩阵来表示它们间的邻接关系。
(2)邻接表:由表头结点和表结点两部分组成,其中图中每个顶点均对应一个存储在数组中的表头结点。把该表头结点的相邻结点依次存放于表头结点所指向的单链表中。
2.5 图的遍历
(1)深度优先搜索(DFS)
- 先访问起始点 v ;
- 若 v 的第一个邻接点没访问过,则访问第一个邻接点;
- 若当前邻接点已访问过,则找 v 的第二个邻接点重新遍历。
(2)广度优先搜索(BFS)
- 在访问了起始点 v 之后,依次访问 v 的邻接点;
- 然后再顺序访问这些点的下一层未被访问过的邻接点。