二叉树性质及习题

二叉树性质及习题二叉树性质:1.在二叉树的第k层至多有2^(k-1)个结点。(k>=1)2.深度为k的二叉树至多有2^(k-1)个结点(k>=1)。3.对任何一棵二叉树T,如果其叶结点数为n0,度为2的结点数为n2,则n0=n2+1。证明:若度为1的结点有n1个,总结点个数为n,总边数为e,则根据二叉树的定义,n=n0+n1+n2…

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

二叉树性质:
1.在二叉树的第 k层至多有 2^(k -1)个结点。(k>=1)
2.深度为 k 的二叉树至多有 2^(k-1)个结点(k >=1)。
3. 对任何一棵二叉树T, 如果其叶结点数为n0, 度为2的结点数为 n2,则n0=n2+1。
证明:
若度为1的结点有 n1个,总结点个数为n,总边数为 e,则根据二叉树的定义,

        n = n0 + n1 + n2    

        e = 2n2 + n1 = n - 1 (除了根节点,每个节点对应一条边 )

       因此,有  2n2+ n1 =n0 + n1 + n2- 1

                      n2= n0 - 1  =>   n0= n2+ 1

      空链域:2n0+ n1 = n0 + n2 +1+ n1 = n+1

4.具有 n (n>=0) 个结点的完全二叉树的深度为+1

   证明:设完全二叉树的深度为 h,则根据性质2 和完全二叉树的定义有

        2^(h-1)- 1 < n <= 2^h - 1或 2^(h-1)<= n < 2^h

           取对数 h-1 < log2n  <= h,又h是整数,

           因此有 h = +1 

5.如果对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到最后一层,每层从左到右),对任一结点i(1<=i<=n)有:

如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点 ⌊ i/2 ⌋ 。
如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i 。
如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1 。

完全二叉树:
定义:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(结点可为单个)
(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)
(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l。
在这里插入图片描述

性质:
如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :
①n= n0+n1+n2 (其中n为完全二叉树的结点总数);又因为一 个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点
②n= 1+n1+2n2 ;由①、②两式把n2消去得:n= 2n0+n1-1,**由于完全二叉树中度为1的结点数只有两种可能0或1,**由此得到n0=n/2 或 n0=(n+1)/2。

 **简便来算,就是 n0=n/2,其中n为奇数时(n1=0)向上取整;n为偶数时(n1=1)向下取整。可根据完全二叉树的结点总数计算出叶子结点数。**

完全二叉树通常采用数组存储

习题:
例:
设一棵完全二叉树共有699个结点,则在该二叉树中的叶子
多种方法:
1.根据 “二叉树的第 i层至多有 2^(i – 1) 个结点;深度为 k的二叉树至多有
2^k – 1 个结点(根结点的深度为 1)”这个性质:
因为 2^9-1 < 699 < 2^10-1 , 所以这个完全二叉树的深度是 10,前 9层是一个满二叉树,这样的话,前九层的结点就有 2^9-1=511 个;而第九层的结点数是 2^(9-1)=256
所以第十层的叶子结点数是 699-511=188 个;
现在来算第九层的叶子结点个数。
由于第十层的叶子结点是从第九层延伸的,所以应该去掉第九层中还有子树的结点。因为第十层有 188个,所以应该去掉第九层中的 188/2=94个;
所以,第九层的叶子结点个数是 256-94=162,加上第十层有 188个,最后结果是 350个。
2.根据 n0=n/2,其中n为奇数时(n1=0)向上取整;n为偶数时(n1=1)向下取整。可根据完全二叉树的结点总数计算出叶子结点数得到结果
其他题目:https://wenku.baidu.com/view/988bd3b5ab00b52acfc789eb172ded630b1c98e6.html?re=view

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

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

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


相关推荐

  • 数据库原理课程设计—停车场管理系统

    数据库原理课程设计—停车场管理系统数据库原理课程设计—停车场管理系统停车场收费管理系统是现代化停车场车辆收费及设备自动化管理的一个统称,是将停车场完全置于计算机统一管理下的高科技机电一体化产品。人们对停车场管理的要求越来越高,智能化程度越来越高,使用更加方便快捷。不仅提高了现代人类的工作效率,也大大的节约了人力物力,价低了公司的运营成本。它通过只能设备使感应卡记录及持卡人进出的相关信息,同时对其信息加以运算、传送并通过字符显示、语音播报等人机界面转化成人工能够辨别和判断的信号,从而实现计时收费、车辆管理等目的。针对用户的不同需求,

    2022年5月12日
    41
  • 网络基础之网络协议

    一.操作系统基础操作系统:(OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才

    2022年3月29日
    34
  • pip怎么卸载安装包_python pip升级

    pip怎么卸载安装包_python pip升级pip卸载安装的所有python包

    2022年10月19日
    0
  • 学习如何搭建SpringBoot框架

    学习如何搭建SpringBoot框架SpringBoot是一个非常好用的框架,在项目中我们常常会用到它,今天我来分享一下如何来搭建一个SpringBoot框架。第一步:创建项目打开Idea,点击File->New->Project->SpringInitalizr选择依赖:即使不选择依赖也可以在后续pom.xml文件中添加点击Finish,Idea会自动生成一个SpringBoot项目,如此一来项目就创建好了。第二步:配置数据库到resource->application.proper

    2022年8月20日
    5
  • navicat sqlserver15激活码_通用破解码

    navicat sqlserver15激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    115
  • 音乐播放器之QQ音乐最新api,亲测可用「建议收藏」

    音乐播放器之QQ音乐最新api,亲测可用「建议收藏」大家好,前段时间重写了自己的音乐播放器,源码放在github上,源码地址和项目地址下面都有,如果喜欢记得star一下哈。由于之前给大家分享的api虽然可以用,但是版本太旧了,很多也没有了歌词,今天博主给大家分享一个最新的qq音乐api,亲测可用,话不多说直接上代码最新音乐leturl=’https://c.y.qq.com/v8/fcg-bin…

    2022年6月26日
    51

发表回复

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

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