本人正在学习的过程中,若有不足或者错误,希望能够指出
希望我写的这些,能够帮到看到这篇文章的你
涉及到的知识:
1、二叉树的深度(好多资料都喜欢设为k),也就是层数;
2、任意一棵树的总的节点数等于总分支数+1;
3、叶子节点,也可以称为末级节点(即最底层的节点,度为0,度的值也就是分支数);
4、一个深度为k的满二叉树的总结点数为2^k – 1(满二叉树指除叶子节点外每一个节点都有两个分支,即只有度为2和度为0的节点);
5、深度为k的完全二叉树,最少有2^(k -1 )个节点,最多有2^k – 1个节点(即满二叉树,是特殊的完全二叉树)。
计算题:
1、一颗二叉树第六层(即深度为6)的节点树最多为?
答:二叉树每层的节点数最多为2^(k -1 );
一般问最多,直接考虑为满二叉树,所以第六层为2^5 = 32;
2、某二叉树中度为2的节点有18个,则该二叉树中有多少个叶子节点?
答:首先需要知道两个公式:
总节点个数=总分支数+1
总结点个数=度为2的节点数+度为1的节点数+度为0的节点数
然后就可以列等式了(数学真的是很厉害)
度为2的,分支数为节点数*2;度为1的,分支数为节点数*1;度为0的,分支数为节点数*0;
设度为2、1、0的节点数为n2、n1、n0,那么有n2 + n1 +n0 = n2 * 2 + n1 * 1 + n0 * 0 + 1
也就是一个公式n0 = n2 + 1,直接就出来了
结果:n0=19;
3、设一颗完全二叉树共有199个节点,那么该二叉树共有多少个分支节点?
答:以第二题的节点进行假设:
分支节点数 = n2 + n1,也就是总节点数n - 叶子总节点数n0;
进行一个假设,这个完全二叉树深度为k,也就是前k-1层为满二叉树,那么有:
2^(k-1) – 1 < 199
这个k值怎么取应该不用我再细说,得到k=8;所以前7层的总的节点数为2^7 – 1 =127;
那么最后一层的叶子数为:总结点数 - 前7层的叶子总数 = 199 - 127 = 72;
第7层肯定是有叶子节点的(不然就是满二叉树了),第七层的叶子数 = 第七层的叶子数 - 度为2以及度为1的节点数 = 2^7 – 72/2 = 28;
所以这个完全二叉树的总叶子节点数为:28 + 72 = 100;
依据开头的公式,分支节点数 = 总节点数 - 叶子总节点数 = 199 - 100 = 99;
4、在深度为7的二叉树中,最多有多少个叶子节点?
答:先说答案,最多为满二叉树,也就是2^(7-1) = 64;
5、设一颗完全二叉树共有127个节点,那么该二叉树是满二叉树吗?
答:还是先设深度为k,那么假设它为满二叉树,看能否计算出k值(记住k可是整数啊);
有公式2^k – 1 = 127 ,得k = 7;
说明肯定是满二叉树。
6、具有53个节点的完全二叉树的深度为?
答:惯例,设深度为k;
一般提到完全二叉树,先考虑前k – 1层,因为前k – 1层肯定是满二叉树,根据公式
2^(k-1) – 1 < 53
取最大的一个k值即可,得k=6
7、设一颗完全二叉树共有700个节点,则在该二叉树中共有多少个叶子节点?
答:来来来,国际惯例,设深度k
聪明的你,有没有发现其实和第三题算是一个题(一个是求分支节点,一个叶子节点,合起来不就是总节点数么)
我就直接列公式了:2^(k -1) – 1 < 700
取最大的一个k值,得k = 10
就能够得到第10层的节点数也就是一部分叶子节点(因为第9层还有叶子节点)为:700 - 2^9 + 1 = 189;
第9层的叶子节点 = 第9层节点总数 – 第9层度为2的节点和度为1的节点数 = 2^(9 – 1 ) – 188/2 -1 = 161;
所以这个二叉树中的总叶子节点数为:161 + 189 = 350
公式(上面的题要是都了解了,下满的公式也就不重要了,不然可能会让你混乱):
这里先设值,二叉树的深度为k,二叉树的节点总数为n,度为2、1、0的节点数为n2、n1、n0,第k层的节点数nk
二叉树的节点总数n = n2 + n1 + n0,n0 = n2 + 1
总节点个数n = 总分支个数 + 1 = n2 * 2 + n1 * 1 + n0 * 0 + 1
二叉树为满二叉树:节点总数n = 2^k – 1,第k层的节点数nk = 2^(k – 1 )
第一次写,题目是自己在网上找的,但分析是自己分析的;有点乱,后续会把它精简,毕竟有一个从繁到简的过程;
分析的不知是否正确,若有错误,希望能够给我留言,我会及时改正的。