二叉树性质及证明「建议收藏」

二叉树性质及证明「建议收藏」二叉树性质及证明(1)规定根节点层次为0,则一棵非空二叉树的第i层上最多有2i个结点。(2)规定根节点层次为0,则深度为k的二叉树的最大结点数为2(k+1)-1。(3)具有n个结点的完全二叉树的深度k为不超过lb(n+1)-1的最大整数。(4)对于一棵非空二叉树,如果叶节点个数为n0,度为2的结点数为n2,则有n0=n2+1。(5)对于具有n个结点的完…

大家好,又见面了,我是你们的朋友全栈君。

二叉树性质及证明

  • (1)规定根节点层次为0,则一棵非空二叉树的第i层上最多有2i个结点。
  • (2)规定根节点层次为0,则深度为k的二叉树的最大结点数为2(k+1)-1。
  • (3)具有n个结点的完全二叉树的深度k为不超过lb(n+1)-1的最大整数。
  • (4)对于一棵非空二叉树,如果叶节点个数为n0,度为2的结点数为n2,则有n0=n2+1。
  • (5)对于具有n个结点的完全二叉树,按上下左右顺序对结点从0编号,则对于序号为i的结点有:
+ 如果i>0,则i的双亲序号为(i-1)/2 (/为整除)

+ 如果2*i+1<n,则序号为i结点的左孩子为2*i+1,若大于n,则无左孩子

+ 如果2*i+2<n,则序号为i结点的右孩子为2*i+2,若大于n,则无右孩子

证明:

  • (1)根据二叉树的特点,每个结点可分至多两个叉,规律可寻,即得2i。

  • (2)深度为k的二叉树所有最大结点个数,即满二叉树时,根据(1)每层结点相加,得2(k+1)-1。

  • (3)根据(2),n个结点必然大于深度为其上一层结点数,小于等于同等深度满二叉结点数,即
    2k-1<n<=2k+1-1 移项,两边取2的对数,得 k<lb(n+1)<=k+1

  • (4)二叉树只有0,1,2度结点所以n=n0+n1+n2

    二叉树的进入分支数,即有双亲的结点数除去根节点 M=n-1

    二叉树的发出结点数,1度发出1个,2度发出2。 可有M=n1+2*n2

    综上可移项得n0=n2+1

  • (5)对于性质5,可举例图示,按序号代替具体数值

              0
    
        1           2
    
      3    4     5     6 
    
    7    8
    

   1号在其层上索引为0,2号在其层索引为1。 同理3号在其层索引为0,5号其层索引为2 。因为二叉树分二叉的特点 可知按照各自本层索引有关系 y=2*x x为双亲层索引 y为孩子层索引。

   那么只需求得各自层内索引即可,因为按顺序编号,所以各自层索引就是 结点的二叉树索引减去除去本层的结点总数即

  2*(i-(2k-1)=j-(2k-1) 移项 i为双亲结点号,j为左孩子结点号 ,

  得左孩子结点索引j=2*i+1 。

  同理 右孩子j=2*i+2 ,双亲 (i-1)/2

  
  PS:根据性质5 我们就可以用一维数组存储二叉树了,可以索引并修改。 对于性质的应用,举例:哈夫曼编码,总结点数为2*n0-1,有兴趣自行推导

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138186.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sigprocmask sigaction

    sigprocmask sigaction sigprocmask:用于随时添加信号屏蔽字;sigaction :signal增强版本,当处理信号时,可以随意添加信号屏蔽字sigset_tnewmask,oldmask,pendmask;signal(SIGINT,sig_handler);sigemptyset(&amp;newmask);sigaddset(&amp;…

    2022年5月26日
    37
  • java经典面试题之Spring Boot 面试题汇总附答案(史上最全持续更新)「建议收藏」

    java经典面试题之Spring Boot 面试题汇总附答案(史上最全持续更新)「建议收藏」1.什么是SpringBoot?SpringBoot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。2.SpringBoot有哪些优点?SpringBoot主要有如下优点:容易上手,提升开发效率,为Spring开发提供一个更快、更广泛的入门体验。开箱即用,远离繁琐的配置。提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监

    2022年10月12日
    0
  • 腾讯android面试题_Android腾讯面试题

    腾讯android面试题_Android腾讯面试题如何画出一个印章的图案;如何实现一个字体的描边与阴影效果;同一个应用程序的不同Activity可以运行在不同的进程中么?如果可以,举例说明;Java中的线程同步有哪几种方式,举例说明;说说对Handler,Looper,以及HandlerThread的理解;dp,dip,dpi,px,sp是什么意思以及他们的换算公式?layout-sw600dp

    2022年8月28日
    3
  • Java 唯一ID生成器「建议收藏」

    Java 唯一ID生成器「建议收藏」前言:   前段时间,写了一个ID生成,发在群里,结果遭到别人嘲笑,心有不甘,于是思来想去,决定在重新写一个ID生成器。此方法生成的ID理论上也是会有重复,但是这个概率太低太低,低到可以忽略不计。原理:使用当前时间戳+指定长度的随机数,并随机打乱字符串。可以生成指定长度的纯数字的ID。具体实现代码:/***普通Id生成器,用时间戳生成+2位随机数生成,*此方法

    2022年6月16日
    419
  • java分布式(java入门)

    java分布式(java入门)【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】说起来,在大学里面我学过的编程语言只有c++和java。这其中c++是作为必修课学的,而java是作为选修课学的。至于后面的c、汇编、python、js这些语言,那都是工作了之后才学的。至于这些语言有什么用,在什么场景下使用效率最高,其实说实话,当时心里不是很清楚,等到真正明白过…

    2022年5月1日
    31
  • namenode负责资源调度,yarn也是资源调度,二者的区别是什么

    namenode负责资源调度,yarn也是资源调度,二者的区别是什么namenode负责资源调度,yarn也是资源调度,二者的区别是什么

    2022年4月23日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号