美文网首页
二叉树相关的一些知识及计算题

二叉树相关的一些知识及计算题

作者: 愿你能温柔的对待世界 | 来源:发表于2017-12-09 19:01 被阅读0次

    本人正在学习的过程中,若有不足或者错误,希望能够指出

    希望我写的这些,能够帮到看到这篇文章的你


    涉及到的知识:

    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 )

        第一次写,题目是自己在网上找的,但分析是自己分析的;有点乱,后续会把它精简,毕竟有一个从繁到简的过程;

        分析的不知是否正确,若有错误,希望能够给我留言,我会及时改正的。

    相关文章

      网友评论

          本文标题:二叉树相关的一些知识及计算题

          本文链接:https://www.haomeiwen.com/subject/gtkpixtx.html