二叉树主要性质推导
二叉树的定义
二叉树或为空树,或是由一个根节点加上两棵分别被称为左子树和右子树的、互不相交的二叉树组成。
二叉树性质
-
二叉树第i层上最多有 2 i − 1 2^{i-1} 2i−1个结点
- 数学归纳法:
当i=1时,二叉树只有一个根结点;
假设对于第j层满足至多有 2 j − 1 2^{j-1} 2j−1个结点,如果第j层每个结点 都拥有两个孩子结点,则第j+1层拥有 2 j 2^j 2j个结点。
- 数学归纳法:
-
深度为k的二叉树上至多含有 2 k − 1 2^{k}-1 2k−1个结点
证明:由性质1知二叉树每一层最大结点数个数。 因为一共有k层,所以有结点个数n=2^0+2^1+...+2^(k-1) 等比数列求和得n=2^k-1
-
对任何一颗二叉树,设叶子结点数为 n 0 n_0 n0,度为2的节点数为 n 2 n_2 n2,那么 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
- 证明:设度为1的结点个数为
n
1
n_1
n1,结点总个数为n。
则有 n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2,(1)
又因为度为1的结点有1个孩子,度为2的结点有两个孩子,除根结点外所有结点都有父亲结点,
所以 n = 2 n 2 + n 1 + 1 n=2n_2+n_1+1 n=2n2+n1+1,(2)
联立(1)和(2)得到: n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
- 证明:设度为1的结点个数为
n
1
n_1
n1,结点总个数为n。
-
具有n个结点的完全二叉树的深度为 [ l o g 2 n ] + 1 [log_2n]+1 [log2n]+1
- 证明:
由性质2得到深度为k的完全二叉树最多有 2 k − 1 2^{k}-1 2k−1个结点,
其至少: 2 k − 1 2^{k-1} 2k−1个结点,
故有 2 k − 1 ⩽ n < 2 k 2^{k-1} \leqslant n<2^k 2k−1⩽n<2k
取对数 k − 1 ⩽ l o g 2 n < k k-1 \leqslant log_2n<k k−1⩽log2n<k
所以k=[log2n]+1
- 对有n个结点的完全二叉树的结点按层序编号,则对任一结点
i
(
1
⩽
i
⩽
n
)
i(1 \leqslant i \leqslant n)
i(1⩽i⩽n),有:
- 如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是[i/2]
- 如果2i>n,则结点i无左孩子;如果2i<=n,则其左孩子是2i
- 如果2i+1>n,则结点无右孩子;如果2i+1<=n,则其右孩子是2i+1
- 证明:假设结点i在第k层,其双亲j是第k-1层的第q个结点。
则有 j = 2 k − 2 − 1 + q j=2^{k-2}-1+q j=2k−2−1+q,
如果i是j的左孩子则有, i = 2 k − 1 − 1 + 2 ( q − 1 ) + 1 i=2^{k-1}-1+2(q-1)+1 i=2k−1−1+2(q−1)+1
如果i是j的右孩子则有, i = 2 k − 1 − 1 + 2 ( q − 1 ) + 2 i=2^{k-1}-1+2(q-1)+2 i=2k−1−1+2(q−1)+2
综上联立各个方程得出:
j=[i/2],若j有左孩子, 2 j ⩽ n 2j\leqslant n 2j⩽n则 i = 2 j i=2j i=2j,若j有右孩子, 2 j + 1 ⩽ n 2j+1 \leqslant n 2j+1⩽n则 i = 2 j + 1 i=2j+1 i=2j+1