二叉树性质的性质及证明整理

二叉树性质的性质及证明整理——整理于2020.4.29二叉树的性质及证明性质1:在二叉树的第i层上至多有2(i-1)个结点(i>=1)证明:数学归纳法(1) i=1时只有一个根节点。显然2(i-1)=20=1是对的(2) 假设对所有的j,1<=j<i,命题成立,即第j层上至多有2(j-1)个结点(3)由归纳假设可得:第i-1层上至多有2(i-2)个结点。由于二叉树…

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

——整理于2020.4.29

二叉树的性质及证明

性质1:在二叉树的第i层上至多有2(i-1)个结点 (i>=1)

证明:数学归纳法
(1) i=1时只有一个根节点。显然 2(i-1)= 20= 1是对的
(2) 假设对所有的 j, 1<= j <i, 命题成立,即第j层上至多有2(j-1)个结点
(3) 由归纳假设可得: 第i-1层上至多有2(i-2)个结点。由于二叉树的每个结点的度数至多为2,所以在第i层上的结点数最多为i-1层上的两倍,即2*2(i-2)=2(i-1),即得出第i层上结点数至多为2(i-1)

性质2:深度为k的二叉树至多有2(k-1)个结点(k>=1)

证明:等比数列求和( Sn=a1(1-qn) / 1-q )
由性质一( 在二叉树的第i层上至多有2(i-1)个结点(i>=1) )可知,深度为k的二叉树的最大结点数为:
在这里插入图片描述

性质3:对任何一棵二叉树T, 如果其终端结点(叶子结点)数为 n0, 度数为2的结点数为 n2, 则n0=n2+1

证明:
设n1为二叉树T中度数为1的结点数,n为二叉树结点总数,则有:
n=n0+n1+n2
又因为二叉树中除根节点外每一个结点都对应一个分支,则分支数B=n-1,
由于这些分支是由度为一和二的结点射出的,所以有B=n1+2*n2,所以有:
n=n1+2*n2+1 ②
联立①②可得 n0=n2+1

完全二叉树的两个重要性质

性质4: 具有n个结点的完全二叉树的深度为 ⌊log2n⌋+1
注:⌊x⌋表示不大于x的最大整数

证明:假设完全二叉树的深度为k,则根据性质2和完全二叉树的定义有
2(k-1) -1 < n <= 2k -1
由于n为整数,上式可变为:
2(k-1) <= n < 2k
两边同时取对数得:
k-1 <= log2n < k
因k为整数,即得k= ⌊log2n⌋+1

性质5:
如果对一颗有n个结点得完全二叉树(其深度为⌊log2n⌋ +1)得结点按层序编号(从第1层到第⌊log2n⌋ +1层,每层从左到右),对任一结点 i (1<= i <= n)有:
1.如果 i =1,则结点 i 是二叉树得根,无双亲;如果 i>1,则其双亲是结点⌊i/2⌋
2.如果 2i > n,则结点 i 无左孩子(结点 i 为叶子结点); 否则其左孩子是结点 2i
3.如果 2i+1 > n,则结点 i 无右孩子; 否则其右孩子是结点2i+1

证明:(暂时简单说明,有空再补)
参考大话数据结构/北京大学出版社/程杰
/图片来自大话数据结构/北京大学出版社

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

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

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


相关推荐

  • C#拆分器控件Splitcontainer

    C#拆分器控件Splitcontainer拆分器控件Splitcontainer拆分器控件Splitcontainer,是一个含有Splitter拆分条的容器,它包含两个面板容器Panel1,Panel2,可以移动拆分条,对面板大小进行控制!控件学习示例程序!属性介绍;//拆分条的是否启用禁用boolIsSplitterFixed{get;set;} bool类型,true:不能调节拆分条;false

    2022年7月18日
    18
  • mysql使用set类型_java修改request请求参数

    mysql使用set类型_java修改request请求参数Iamtryingtosendmultipleimagestoserverbut,soIamstoringalltheimagesinonearraylist,butafterthatwhenIneedtosendtoserver,itshowserrornearline,,………………….conn.set…

    2022年9月10日
    2
  • lambda表达式用法_使用lambda表达式定义函数

    lambda表达式用法_使用lambda表达式定义函数(一)输入参数在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(,)分割。示例1下面创建一个Lambda表达式,它的输入参数的数量为0.该表达式将显示“ThisisaLambdae…

    2022年9月19日
    2
  • 小程序怎么开发自己的小程序_微信小程序建议使用

    小程序怎么开发自己的小程序_微信小程序建议使用微信小程序入门前言随着科技的不断进步,很多功能将会开放,那么很多需求也将会因为现实而得到满足,这是一种不需要下载和安装就可以使用的应用软件。用户只需扫描和搜索就可以打开应用程序。它很容易使用,而且很容易实现。小程序带来了巨大的流量,吸引了很多大的人和企业家前来追踪,也显示出它强大的生命力。小程序是下一个被确定为互联网新品种的程序,信已经成为不可缺少的交流工具,小程序依附于微信,用户搜索起来也会更方便,其实这就是小程序发展的前景和优势。提示:以下是本篇文章正文内容,下面案例可供参考一、小程序的概

    2022年9月27日
    2
  • vue相比jquery_angular和vue哪个厉害

    vue相比jquery_angular和vue哪个厉害jQuery到Vue的转变是一个思想的转变,将原有的直接操作dom的思想转变到操作数据上前言:很多人说jquey和vue没有什么可比的,应该和Angular,React来比吧,我到觉得他们倒没有多大的可比性,都是基于mvvm思想设计的框架,无非就是实现的方式不一样,在不同场景下性能上会有一些差异。然而从jquery到vue或者说是到mvvm的转变则是一个思想想的转变,是将原有的直接操作dom的思想转变到操作数据上去,难道不是一个根本性的改变吗?jquery介绍:想必大家都用过jquery吧,这个曾经.

    2022年10月15日
    2
  • nginx服务器究竟是怎么执行php项目

    nginx服务器究竟是怎么执行php项目

    2021年10月19日
    49

发表回复

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

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