初阶二叉树的相关题目

news2024/11/18 15:48:57

前言:

       前面我们介绍了初阶二叉树的相关知识,二叉树常考的还是链式二叉树,而且二叉树也会考很多选择题,本文重点是在给出一些常考的二叉树的性质定理推导和经典练习题目配合强化巩固知识。

目录

一、二叉树的常见性质定理

二、常见性质定理的考察题目

三.金句频道


 

一、二叉树的常见性质定理

1. 若一个二叉树有n个节点,则该二叉树共有(n-1)条边。

证明:任意给出一棵二叉树,其中的每一个节点都有一个前驱节点(根节点除外),我们将一个节点和该节点指向它的前驱的点绑定看做一组,这样,对于二叉树的每一个节点,除根节点外,都有一个节点配成指向前驱的边,假设总共有n个节点,那么就有n-1条边(根节点没有指向前驱的边)。

2.若规定 根结点的层数为 1 ,则一棵 非空二叉树的第 i 层上最多有 2^(i-1)   (i>0) 个结点。

       我们知道,只有满二叉树的每一层的节点数是最多的,我们可以自己画出一棵满二叉树,比较容易的就可以发现这个规律,注意,这是建立在根节点是第一层的前提下的。

3.若规定只有根结点的二叉树的深度为1,则深度为 k 的二叉树最多有 2^k  -1 个节点

   最多一定就是就是满二叉树了,这一点我们利用等比数列求和即可得出,等比数列求和公式为:

深度为k代表有k项,将k带入可得到:2^k  -1

4.对于任何一棵二叉树,如果其叶节点数为 n0,度为 2 的节点总数为n2,则 n0=n2+1

证明:假设一棵二叉树的度为0的节点有n0个,度为2的节点有n2个,度为1的节点有n1个,假设二叉树共有n个节点,所以有:

                                               n0 + n1 + n2 = n

该二叉树包含的边总数为:n - 1
度为0的节点的边的条数:0
度为1的节点的边的条数:1
度为2的节点的边的条数:2

所以有:

                                               n - 1 = n1 + 2*n2

n=n0 + n1 + n2 ;      也即          n0 = n2 + 1

5.具有 n 个结点的完全二叉树的深度 k为log(n+1)上取整 

       完全二叉树只允许最后一层缺少结点,所以说,如果我们按最大节点个数(即满二叉树)计算的话,那么我们可以利用性质三:

                                                             2^k  -1 >= n

                                                               2^k>=n+1

                                             

        向上取整顾名思义,类似于3.1向上取整到4即可,因为我们是按满二叉树计算的,所以实际节点数肯定小于等于满二叉树时的节点,但是最后一层不满但是深度还是相当于满二叉树的深度,所以需要向上取整。

6.对于具有 n 个结点的完全二叉树 ,如果按照 从上至下从左至右的顺序对所有节点从 0 开始编号 ,则对于 序号为  i 的结点有 :
        若i>0 ,则其 父结点序号为: (i-1)/2
        若2i+1<n,则其左孩子序号为: 2i+1; 否则无左孩子。
        若2i+2<n ,则其右孩子序号: 2i+2; 否则无右孩子。

      当然,这里也是要分情况的,一般按这种下标的建树方式,称之为二叉树的顺序结构,但是这样也会存在问题,比如,如果一个节点没有左孩子,只有右孩子,我该不该把左孩子的节点空出来,以此来保持后续节点的逻辑关系不会因为确实而发生改变呢?比如下面的情况:

        所以,一般情况下,我们的二叉树采用数组的方式的顺序实现只是用于满二叉树或者完全二叉树的情况,可以大大提高空间的利用率,该种实现方法也比较常见的用于堆排序等设计建大根堆小根堆 问题去,具体可以参考二叉树初阶和堆的详解。

二、常见性质定理的考察题目

       这部分比较考验我们对二叉树的相关的基础概念,比如二叉树的度,结点之间的关系,不同类型的二叉树之间的关系,为了提高我们的思考能力,这里一律将选择题视作填空题展示,希望读者能够边读题边思考。

1.

        二叉树的度:在二叉树中,每个节点最多只能有两个子节点,因此每个节点的度最大为2,即最多只有2个子节点。而节点的度指的是该节点拥有的子节点数,因此二叉树的度不同于一般意义上的度。在二叉树中,节点的度只能是0、1或2三种情况。

        而树的度不受二叉树的限制,所以树能有无穷多个度,上不封顶,我们回到题目,一棵度为三的树,就代表这个树中每个结点最多只有三个孩子,我们假设这棵树的总的结点个数为n个,则n=n0+n1+n2+n3;其中叶子结点的度为0,也就是n0,其他的同理;我们还可以知道,一棵树的一个结点必然有一个前驱(根节点除外),所以一个由n个结点组成的树,它的边数就有n-1条,我们可以根据边数和节点的关系来列出关系式,即

                              n-1=0*n0(0度节点产生0条边)+1*n1+2*n2+3*n3;

可得                                    n0+n1+n2+n3-1=n1+2*n2+n3;

 即可求得 n0=6,也即叶子结点的个数为6个。

2.

        一棵树的度为4,代表这棵树的节点最多有四个子节点,而当这棵树每一层都是满的时,它的深度最小。也就是说,这棵树应当是一棵满四叉树。

       假设高度为h,则由求二叉树节点个数的公式类比可知:根据等比数列求和公式得,这个数的节点个数为(4^h - 1) / 3。

       

当h = 5,最大节点数为341,当h = 6, 最大节点数为1365,所以,最小深度应该向上取整为6,此时的状态是前5层是满二叉树,第六层不是满二叉树。 

3.

区分完全二叉树和满二叉树:

        我们知道完全二叉树只有最后一层是不满的,所以完全二叉树直到倒数第二层都符合满二叉树的性质,我们知道k层满二叉树有2^k  -1 个节点,而2^10-1=1023,2^9-1= 511,所以第九层一定是满的,到第十层出现了缺少节点的情况,1001-511=488,也就是剩余488个节点在最后一层,这489个节点没两个节点连到上面一层的一个节点上,我们可以容易的求出倒数第二层有2^8=256个节点,而最后一层剩余的488个节点需要每两个和这256个节点中的一个组成一棵子树,同时使倒数第二层的一个根节点变为度为2的节点,489/2=244,所以这样的节点共有244个,所以上层就会剩余256-244=12个叶子结点产生,最终的叶子结点个数为489+12=500个。

        此外,我们还可以利用这样的一个结论:在完全二叉树中,如果节点总个数为奇数,则没有度为1的节点,如果节点总个数为偶数,只有一个度为1的节点。

因此:n0 + n1 + n2 = 1001 节点总数为奇数,没有度为1的节点

                                    n0 + 0 + n2 = 2*n0-1 = 1001

                                                    n0 = 501

 

4.

         由题意得(不知道写啥,写它就对了,嘿嘿),假设总的节点个数为n,度为2的节点为n2,由我们上面的性质4可以直接得出n2=3-1=2,那就直接n=n2+3+8=13,完事了,怎么样,简单吧。

5.

 

 这种题目就是经典的由先(后)序遍历+中序遍历建二叉树的思想,具体详见二叉树的相关题目及其功能的实现中的二叉树创建的第一种方式。

这里我们就先解题为主:

       这里具体过程需要递归实现,感兴趣的可以看上面的参考,里面有具体实现方式,这里只是讲一下原理,

 

 6.

      直接上性质吧,m个度为0的节点,那么根据性质4就可以得出度为2的节点有m-1个,根据题意,没有度为1的节点,那节点总数就直接是m+m-1=2*m-1了。

7.

这个题,我们不能只考虑到满二叉树的情况,试想一下,一层有一个节点是不是深度就会更大呢?像这样:

 

所以说,我们的取值范围是[log(n+1),n];

8.

这个题,看起来不是那么好做,我们需要分很多种情况,并且容易漏掉一些情况,

首先这棵二叉树的高度一定在3~4层之间:

三层:(其中()表示该处为空()内部代表节点的子树部分)

A(B(C,D),()), A((),B(C,D)), A(B(C,()),D), A(B((),C),D),

A(B,C(D,())), A(B,C((),D))

四层:

如果为四层,就是单边树,每一层只有一个节点,除过根节点,其他节点都有两种选择,在上层节点的左边还是右边,所以2^3共8种

总共为14种。
 

9.

我们知道先序遍历序列是根-左-右,而后序遍历序列是左-右-根,那么该二叉树一定都没有左孩子或者都没有右孩子,并且它们都满足一个性质,就是节点数等于树高,也就是每一层只有一个节点。

三.金句频道

先沉淀,再厚积薄发

      哈佛大学的校训之一:你所浪费的今天,是昨天死去的人所奢望的明天,你所厌恶的现在,是未来你回不到的曾经。

       要么全力以赴,要么果断放弃。明确生活的态度会让一切变得简单,过多模棱两可,犹豫不决,只会在是非中迷失自我。要记住:种一棵树最好的时间是在十年前,其次是现在。每一个优秀的人都有一段沉默的时光,那段时光是付出很多努力却得不到结果的日子。我管它叫,扎根,沉淀,积累。

      所以不要着急,不要老是觉得为什么我努力了还是没有效果。好好静下心来,认准一个方向,不断积累沉淀。“不积跬步,无以至千里;不积小流,无以成江河。”你只管努力沉淀积累,时间会给你惊喜。

小云彩,大梦想

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你的业务被AI所取替的风险度有多高?AI社交、克隆人、角色扮演、代理人

hi&#xff0c;大家好&#xff0c;最近我们陆续会推出各种实验性项目&#xff0c;把我们在AIGC和数字体验上的思考进行验证&#xff0c;欢迎持续关注我们的进展。&#xff08;文末领取PDF&#xff09; 目前&#xff0c;已经有不少的例子证明了ChatGPT有多好用了。 亚马逊员工在…

定制比例阀控制放大器

定制比例阀控制放大器是为特定应用场景设计的定制化控制系统。它可以根据客户的需求和应用要求&#xff0c;配置输入输出及颤振频率等参数&#xff0c;对现有的控制器进行修改和优化&#xff0c;以满足特定的性能指标和功能要求。随着工业自动化技术的不断发展&#xff0c;定制…

关于安卓viewpager实现堆叠卡片交互

背景 长江后浪推前浪&#xff0c;无聊的需求一浪接一浪。 最近做到一个关于卡片堆叠的需求&#xff0c;觉得挺有意思&#xff0c;所以特此记录一下。 文末将附上源码链接 首先看设计图&#xff1a; 可以看到&#xff0c;是一个卡片堆叠的效果&#xff0c;关于这种UI的实现&…

Android系统安全技术---FBE密钥框架和技术详解

一、前言 用户数据加密是移动设备的重要功能&#xff0c;是使用对称加密算法对Android设备上的所有用户数据进行编码的过程&#xff0c;防止用户数据被未经授权的用户或应用程序访问。 本文是Android系统安全技术系列第二篇&#xff0c;主要介绍基于文件的加密技术。首先介绍An…

到底什么是“云手机”?

今天这篇文章&#xff0c;我们来聊一个很有趣的东东——云手机。 说到云手机&#xff0c;有些童鞋可能并不会觉得陌生。是的&#xff0c;它确实并不是一个新名词。早在2011年左右&#xff0c;国内就有厂商推出了云手机的概念。掐指一算&#xff0c;至今已经有12个年头了。 大家…

APP在应用市场内该如何做推广

苹果应用商城的自然流量都是通过精品推荐&#xff0c;畅销排行榜和搜索来获取的&#xff0c;此外&#xff0c;应用名称、副标题、应用截图视频、应用描述、用户评论、下载量、用户留存率还有曝光量&#xff0c;这些都是影响ASO优化的关键因素。 为了防止一些应用堆砌热词&…

传统设备充电接口如何升级成USB-C PD快充接口?

早在 2009 年开始&#xff0c;欧盟就致力于推动消费电子产品充电接口的统一进程&#xff0c;减少资源浪费推动绿色环保进程&#xff0c;同时充电配件通用化也为消费者带来更好的充电体验。2022 年 10 月 4 日&#xff0c;欧洲议会全体会议上表决通过&#xff0c;在 2024 年底之…

C++服务器框架开发8——日志系统LogFormatter_3/override/宏定义优化switchcase结构

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发7——日志系统LogFormatter_2 C服务器框架开发8——日志系统LogFormatter_3/override/宏定义优化switchcase…

代码随想录算法训练营day60 | 84.柱状图中最大的矩形

代码随想录算法训练营day60 | 84.柱状图中最大的矩形 84.柱状图中最大的矩形解法一&#xff1a;单调栈解法二&#xff1a;暴力双指针(会超时)解法三:优化双指针 总结 最后一天打卡留念! 84.柱状图中最大的矩形 教程视频&#xff1a;https://www.bilibili.com/video/BV1Ns4y1o7…

国产化麒麟linux系统QtCreator和QtCreator编译的程序无法输入中文libfcitx最新版本编译1.2.7

1.问题描述 麒麟linux系统QtCreator和QtCreator编译的程序无法输入中文&#xff0c;网上找了很多的libfcitxplatforminputcontextplugin.so库都无法使用正常输入&#xff1b; Qt版本&#xff1a;5.9.6 麒麟系统版本&#xff1a;海光麒麟桌面版kylin V10 SP1 小版本号2203 X…

一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询

一个多功能(聚合)查询接口&#xff0c;实现模糊、分页、主键、排序以及多条件查询 前言 写的啰嗦了点&#xff0c;看效果请直接忽略中间&#xff0c;直接看后半部分。 引个流&#xff0c;公众号&#xff1a;小简聊开发 概念 瞎编的名字&#xff0c;哈哈哈&#xff0c;我就勉强…

一道北大强基题背后的故事(二)——出题者怎么想的?

早点关注我&#xff0c;精彩不错过&#xff01; 上篇文章中&#xff0c;我们给出一道北大强基考试中的试题&#xff0c;计算[((1 sqrt(5)) / 2) ^ 12]&#xff0c;给出了一条没有任何数学直觉&#xff0c;纯硬算的弯路以及题目的参考答案&#xff0c;相关内容请戳&#xff1a;…

IronPDF 2023.6.10 FOR NET CRACK

适用于.NET的IronPDF 2023.6.10 添加新的注释API并改进图像压缩逻辑。 2023年6月2日-14:42新版 特点 添加了新的连续进给选项。例如用于生成收据文档。 添加了新的注释API&#xff0c;包括注释删除。 添加了删除书签的功能。 将内存使用率和性能提高了10%。 改进了图像…

全球加速AEB「强标」,15万元以下车型或将「释放」巨量需求

目前&#xff0c;智能驾驶技术升级&#xff0c;主要是在帮助中高端车型提升产品竞争力&#xff0c;同时为车企构建未来软件付费盈利模式的转型。 但另一方面&#xff0c;基础辅助驾驶&#xff0c;尤其主动安全&#xff0c;比如&#xff0c;AEB&#xff08;自动紧急制动&#xf…

【企业化架构部署】基于Apache搭建LAMP架构

文章目录 前言一、LMAP架构介绍1.概念2.LAMP构建顺序3.LAMP编译安装4.各组件介绍4.1 Linux4.2 Apache4.3 MySQL4.4 PHP/Perl/Python 二、服务器部署1.Apache部署2.MySQL部署3.PHP部署4.安装论坛 前言 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整…

考上大学,走进网安

出品&#xff5c;MS08067实验室&#xff08;www.ms08067.com&#xff09; 本文作者&#xff1a;北平靴 01 我和网络安全的相遇&#xff0c;说来很巧。2022年我考入吉林大学计算机学院&#xff0c;正巧我们的导助是学校ctf战队的成员&#xff0c;所以在刚入学的很清闲的日子里&a…

Python中logger模块的使用教程

参考模块&#xff1a; https://www.digitalocean.com/community/tutorials/how-to-use-logging-in-python-3 logger是python的内置模块&#xff0c;用以输出代码运行过程中的运行情况&#xff0c;极大的方便了我们的debug过程。参考资料中列出了使用logger相比于print优越的地方…

ResNet学习

目录 是什么作用怎么做论文阅读 视频来源&#xff1a;https://www.bilibili.com/video/BV1rZ4y1m7d9/?spm_id_from333.337.search-card.all.click&vd_sourcea402747bd6c153bdb2defee02a9cb617 https://www.bilibili.com/video/BV1rZ4y1m7d9/?spm_id_from333.788&vd_…

Java官方笔记5数字和字符串

Numbers Number的子类&#xff1a; 另外还有BigDecimal和BigInteger&#xff0c;用于高精度计算&#xff0c;AtomicInteger和AtomicLong用于多线程应用。 我们有时候需要用包装类而非基本数据类型&#xff0c;理由如下&#xff1a; 方法入参类型为Object&#xff0c;只能传入对…

什么是Linux shell

一句话概括&#xff1a;简单来说脚本就是将需要执行的命令保存到文本中&#xff0c;按照顺序执行&#xff08;由上往下执行&#xff09;&#xff0c;shell脚本:shell脚本就是一些命令的集合。 一、创建第一个Shell脚本&#xff1a;输出helloworld 1&#xff0e;脚本格式 脚本…