二叉树
性质:
第 n 层最多有 2n-1 个节点
深度为 k 的二叉树最多有 2k - 1 个节点(满二叉树)
对于任何一颗二叉树,如果其叶节点有 n0 个,度为2的非叶节点有 n2个,则有 n0 = n2 + 1
n个节点的完全二叉树的深度为 ⌊log2n⌋+1
如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1
i
n)有
如果i=1,则节点i是二叉树的根,无双亲,如果i>1,则其双亲节点为 ⌈i/2⌉
如果2i>n,则节点i没有左孩子,否则其左孩子为2i
如果2i+1>n,则节点没有右孩子,否则右孩子为2i+1
image
image
满二叉树
节点的度都是2且叶子节点都在同一层次上
是一种特殊的二叉树
完全二叉树
与满二叉树深度相同,并且编号一一对应的二叉树
性质:
若 i
⌊n/2⌋,则结点i为分支结点,否则为叶子结点
最下面层的叶节点一定出现在左边
深度为k的完全二叉树,其最少的结点数=深度为 k-1 的满二叉树的结点数+1,即 2k-1个;其最多结点数=深度为k的满二叉树的结点数,即 2k-1
顺序存储完全二叉树A[1,...,n],当 i
(n-1)/2 时,结点A[i]的右孩子是结点 A[2i+1]
哈夫曼树(最优二叉树)
性质:
有n个叶子结点
没有度为1的结点
总的结点数为2n-1
深度
n-1
形态不唯一
要使一棵二叉树的带权路径长度最小,必须使权值越大的叶子节点越靠近根节点,权值越小的节点越远离根节点
利用哈夫曼树可构造前缀编码
最小生成树
在连通网的所有生成树中,所有边的代价和最小的生成树
看谁代价最小,来 PK 呀!P-prime, K-kruskal
prim算法
算法思想:从图中任取一个顶点,把它当成一棵树,然后从这棵树的顶点相邻的边中选取权值最小的边,并把这条边相邻的顶点并入树中,此时得到一颗有两个顶点的树,然后继续从这棵树的两个顶点相邻的边中选取一条最短的边,将其和相邻顶点再次并入树中,重复操作直到所有顶点都被并入树中。