专有名词
- 根节点:最上方的结点
- 度:每个结点链接子结点的数目,最大的度也叫树的度
- 子树:每个结点的延申
- 结点层次:按照从上往下的顺序,根结点的节点层次为1
- 子结点
- 父结点
- 叶子结点:度为0的结点
- 兄弟结点:父结点是同一个
- 祖先结点:从根结点开始,一直到某个结点的整条路径上的所有结点
二叉树(它的度最大为2)
专有名词
- 左子树
- 右子树
- 满二叉树
- 完全二叉树(最后一层可能不是满的,由左到右排)
普通树和二叉树的转换
下面是一个普通的二叉树
转换规则
- 左子树依然是他的左子树
- 该子树的其他兄弟结点变成自己的右子树
根据上述要求,可以得到
森林变成二叉树
- 将每一个普通树变成二叉树
- 将变成二叉树的右子树位置连接其他树的根结点
二叉树相关的数学性质
-
第i层的最大结点数为 2 i − 1 2^i-1 2i−1
-
对于一个深度为k的最大结点数 n = 2 0 + 2 1 + . . . . . . . . + 2 k − 1 2^0+2^1+........+2^{k-1} 20+21+........+2k−1
由高中的等比数列求和公式可得 S n = 1 ∗ ( 1 − 2 k ) / 1 − 2 S_n = 1*(1-2^k)/1-2 Sn=1∗(1−2k)/1−2
化简可得 S n = 2 k − 1 S_n = 2^k - 1 Sn=2k−1 -
假设一颗二叉树的度为0,1,2的节点数分别为 n 0 , n 1 , n 2 n_0,n_1,n_2 n0,n1,n2
则 n = 0 ∗ n 0 + 1 ∗ n 1 + 2 ∗ n 2 n = 0*n_0+1*n_1+2*n_2 n=0∗n0+1∗n1+2∗n2
即 n = n 1 + 2 ∗ n 2 n = n_1+2*n_2 n=n1+2∗n2
边数和 E = n 1 + 2 ∗ n 2 = n − 1 E=n_1+2*n_2=n-1 E=n1+2∗n2=n−1 移项得 n = n 1 + 2 ∗ n 2 + 1 n=n_1+2*n_2+1 n=n1+2∗n2+1
且 n = n 1 + 2 ∗ n 2 + n 0 n=n_1+2*n_2+n_0 n=n1+2∗n2+n0
联立 n 1 + 2 ∗ n 2 + 1 = n 1 + n 2 + n 0 n_1 +2*n_2+1=n_1+n_2+n_0 n1+2∗n2+1=n1+n2+n0
化简 n 0 = n 2 + 1 n_0 = n_2+1 n0=n2+1(结论) -
完全二叉树的深度 h = l o g 2 n + 1 h = log_2n+1 h=log2n+1 向下取整