二叉树性质总结

二叉树性质总结性质1:二叉树第i(i>=1)层上的节点数最多为2^(i-1)证明:归纳基础:第一层有一个节点,第二层最多有两个节点,第三层最多有四个节点,以此类推,数学归纳法证明如下:i=1时,2^(i-1)=2^0=1,因为第一层上为根节点,所以命题成立。归纳假设:假设对所有的j(1归纳步骤:根据归纳假设,第i-1层上至多有2(i-2)个节点,由于二叉树每个节点至多有两个孩子节点,所以第i

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

性质1:二叉树第i(i>=1)层上的节点数最多为2^(i-1)

证明:

归纳基础:第一层有一个节点,第二层最多有两个节点,第三层最多有四个节点,以此类推,数学归纳法证明如下:

i=1时,2^(i-1)=2^0=1,因为第一层上为根节点,所以命题成立。

归纳假设:假设对所有的j(1<=j<i)命题成立,即第j层上至多有2^(j-1)个节点,需要证明j=i时命题依然成立。

归纳步骤:根据归纳假设,第i-1层上至多有2(i-2)个节点,由于二叉树每个节点至多有两个孩子节点,所以第i层上的最多节点数是第i-1层上最多节点数的2倍,即j=i时,该层上最多有2^(i-2)*2=2^(i-1)个节点,因此命题成立。

性质2:高度为k的二叉树最多有2^k – 1个节点。

性质2可以根据性质1证明,即SUM(2^(i-1))(1<=i<=k)  =  2^k – 1(等比数列求和)

性质3:对于任何二叉树T,n0、n1、 n2分别代表度数为0、1、2的节点个数,则n0=n2+1

证明:因为二叉树所有节点的度数均不大于2,所以节点总数(记为n)应该等于0度节点数、1度节点数、2度节点数之和,即n0+n1+n2=n;

1度节点有一个儿子,2度节点有两个儿子,所以二叉树中所有儿子节点的个数是n1+n2,二叉树中只有根节点不是任何节点的儿子节点,因此二叉树中节点总数可以表示为n=n1+2n2+1

有上述两个公式n0+n1+n2=n、n=n1+2n2+1可得:n0=n2+1

性质4:具有n个节点的完全二叉树(包括满二叉树)的高度为[logn]+1(不做特殊说明这里的log都是以2为底的)

证明:设所求完全二叉树的深度为k,有完全二叉树的定义可知,其前k-1层是深度为k-1的满二叉树,一共有2^(k-1)-1个节点,由于完全二叉树深度为k,故第k蹭上还有若干节点,因此该完全二叉树的节点个数n>2^(k-1)-1。由性质2可知n<=2^k – 1,所以

2^(k-1) – 1< n <= 2^k-1

由此推导可得2^(k-1) <= n < 2^k,取对数后有

k-1 <= logn < k

因为k为整数,所以有k-1=logn,即可得k=[logn]+1

二叉树还具有其他性质,读者有兴趣可以自己推导得出,对以上四种性质比较常用,并且对于性质4在研究二叉树时间复杂度的时候可能会有所帮助理解nlogn这种时间复杂度的来源。

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

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

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


相关推荐

  • oracle中case when_oracle case when 嵌套

    oracle中case when_oracle case when 嵌套Case具有两种格式。简单Case函数和Case搜索函数。–简单Case函数CASEsexWHEN’1’THEN’男’WHEN’2’THEN’女’ELSE’其他’END–Case搜索函数CASEWHENsex=’1’THEN’男’WHENsex=’2’THEN’女’ELSE’其他’END…

    2022年10月5日
    5
  • java环境变量配置与adb环境变量配置的关系_mac设置环境变量

    java环境变量配置与adb环境变量配置的关系_mac设置环境变量Java环境变量配置与adb环境变量配置java环境变量配置第一步:下载jdk文件下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html第二步:安装jdk1.打开jdk安装包,点击下一步开始安装。2.弹出安装路径,将目录更改至D盘,点击下一步。3.在D盘Java目录下新建jer文件夹,并将安装路径更改至此目录下4.安装…

    2025年6月28日
    5
  • HashMap工作原理和扩容机制

    HashMap工作原理和扩容机制HashMap工作原理HashMap扩容1HashMap的扩容时机2HashMap的扩容过程补充1容量必须是2的幂2rehashReferences1.HashMap工作原理HashMap作为优秀的Java集合框架中的一个重要的成员,在很多编程场景下为我们所用。HashMap作为数据结构散列表的一种实现,就其工作原理来讲单独列出一篇博客来讲都是不过分的。由于本文主要是简单总

    2022年6月18日
    31
  • prepareStatement与Statement的区别

    prepareStatement与Statement的区别prepareStatement与Statement的区别1.区别:stmt=conn.CreateStatement();resultSetrs=stmt.executeQuery(sql);上面是statement的用法============================下面是PrepareStatement的用法ptmt=conn.Prepa

    2022年5月29日
    48
  • MongoVUE_mongodb怎么用

    MongoVUE_mongodb怎么用一、查询位号名name以A05或者A08开头的值{$or:[{name:/A05.*/},{name:/A08.*/}]}二、查询时间范围

    2022年8月21日
    7
  • idea破解教程2019.3(idea旗舰版如何破解)

    我自己在网上看半天找出来的,主要是破解补丁不知道怎么对应,第一步:下载安装包与破解补丁:安装包:链接:https://pan.baidu.com/s/1Ohy-cp-wrwb1YLelD3DLZA提取码:czdf破解补丁:链接:https://pan.baidu.com/s/1bj2EHJ_BAcfN6IZHQKAh_Q提取码:v3vr第二步:修改idea文件将破解补丁放到…

    2022年4月17日
    99

发表回复

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

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