二叉树的某些重要性质浅析
二叉树是一种特殊的树结构,由于其具备树的所有特性同时在经过适当的限制后非常具有规律性,因此常被用于算法实现以及操作系统功能的实现。因此,考研数据结构中少不了对于二叉树的考察,经过比较谨慎的学习,我对以下几个二叉树的重要性质做出分析。
1.非空二叉树中的叶子结点等于度为2的结点加一
设非空二叉树中度为0、1、2的结点个数分别为n0、n1和n2,则n0 = n2 + 1。这个规律实际上是由运算得来。
假设结点总数为n,则存在 n = n0 + n1 + n2;根据树的性质,n = n1 + 2*n2 + 1。联立两个方程,我们可以得出 n0 = n2 + 1的规律。这个性质十分重要,在选择计算题中经常考察。
2.二叉树的第i层最多有2i-1个结点(i≥1)
这是由于当“最多”时,这个二叉树是一个满二叉树,此时它的每层结点数是一个等比数列,我们是根据等比数列递推公式得到的这个结果。这种等比数列的特性实际上是对所有的m叉树都符合,m叉树的第i层有着mi-1个结点。
3.高度为h的二叉树最多有2h - 1个结点
联系上面的第二条性质,这一条性质是它的延申,由于所有层的结点个数是等比数列,那么所有的结点个数当然就是等比数列求和了。这是一个公比为2,首项为1的等比数列,我们需要进行前n项和公式的带入得到结果,前n项和公式为:a(1-qn)/(1-q),其中a为首项,q为公比,带入相应数字后我们发现结果为2h - 1。当然同上,所有的m叉树都具有此性质,高度为h的m叉树最多有 (mh - 1)/(m-1)个结点。
4.具有n个(n>0)结点的完全二叉树的高度h为⌈log2(n+1)⌉ 或 ⌊log2n⌋+1
这个性质基本上是最重要且有点麻烦的性质了,这个性质也是通过其他性质的数学计算得来的。这里是给了我们n个结点,让我们把这n个结点拼成一个完全二叉树,问其高度。值得注意的是完全二叉树不是满二叉树,所以其并不能带到上面的性质3公式中去,性质3是已知高度推出的最大结点数,仅仅给了结点数是万万不可逆推回去的。因此我们得另辟蹊径,从边界值和数学运算上来找出路。
⌈log2(n+1)⌉的证明
我们已经知道了有n个结点,此时我们假设这n个结点已经拼成了高度为h的完全二叉树,我们此时需要使用二叉树的性质通过n来求出h,然而经过分析我们已经得知不可通过性质3把n带入逆推出h,所以我们使用边界值来求解。
由于我们用n个结点组成了高度为h的完全二叉树,因此n的个数肯定大于高度为h-1的满二叉树的结点数(将高度h-1的满二叉树下按规则再加一个结点就会构成高度为h的完全二叉树);同时n的个数肯定小于高度为h的满二叉树的结点数。这两个特殊的二叉树的结点都可以通过h来表达,因此我们有:
2h-1 - 1 < n ≤ 2h - 1
我们进行数学推导,有如下过程:
① 2h-1 - 1 < n ≤ 2h - 1
② 2h-1 < n + 1 ≤ 2h
③ h - 1 < log2(n+1) ≤ h
事到如今我们可以看出h和n的关系了,此时我们需要通过这个等式来确定h的具体表达式。h - 1和h只差1,然而高度不能取小数,只能从h - 1和h中任取一个,取谁呢?根据不等式我们知道log2(n+1)肯定不等于h - 1,因为是一个小于号把他们连在了一起,而一个小于等于号把它和h连在了一起。因此它会取较大的h,因为log2(n+1)可能是个小数,要取较大的h需要向上取整,因此有⌈log2(n+1)⌉的结果。
⌊log2n⌋+1的证明
这个式子的推导其实和上式很相似,只是对于大于等于在哪边的处理有些出入。我们知道了高度为h的满二叉树的结点数为2h - 1,因此2h 肯定是大于n的,而2h -1- 1 + 1则小于等于n,因为它相当于在高度为h - 1的满二叉树上又放了一个结点,刚好等于结点数最小的高度为h的完全二叉树,因此得到了完全不同的等式:
2h -1 ≤ n <2h
经过取对数
h - 1 ≤ log2n < h
根据不能取小数的原则,我们最终选择了h - 1,因此经过推导我们得到:h = ⌊log2n⌋+1。
这两个式子在数学的意义上都是根据等于号的位置判定的,实际上它是根据取整原则和边界意义决定的,高度不可能为小数,因此我们需要根据其边界的意义进行取整,这个问题重在理解。