初阶二叉树的相关性质定理及题目练习

news2024/11/16 23:55:00

前言:

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

目录

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

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

三.金句频道


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

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/605079.html

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

相关文章

力扣高频SQL50题(基础版)——第四天

力扣高频SQL50题(基础版)——第四天 1 每台机器的进程平均运行时间 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 1.2 示例sql语句 SELECT machine_id,ROUND(SUM(IF(activity_typeend,timestamp,timestamp*-1))/count(distinct process_id),3…

English Learning - L3 作业打卡 Lesson4 Day26 2023.5.30 周二

English Learning - L3 作业打卡 Lesson4 Day26 2023.5.30 周二 引言&#x1f349;句1: It is easy to find my husband in a crowd.成分划分弱读连读语调 &#x1f349;句2: He stands almost two meters tall.成分划分爆破语调 &#x1f349;句3: He is a tall drink of wate…

嵌入式系统中u-boot和bootloader到底有什么区别

嵌入式软件工程师都听说过 u-boot 和 bootloader&#xff0c;但很多工程师依然不知道他们到底是啥。 今天就来简单讲讲 u-boot 和 bootloader 的内容以及区别。 Bootloader Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道&#xff0c;windows开机时会首先加载…

【Nginx性能优化系列】Nginx绑定特定的CPU性能测评

【Nginx性能优化系列】Nginx绑定特定的CPU性能测评 前导知识说明:   CPU内部的缓存叫Cache   比如一颗CPU有4核,每个核心都有自己的独立缓存,以及所有核心的共享缓存。缓存分为一级缓存、二级缓存、三级缓存,一级缓存的速率基本上CPU相当,当然一级缓存的存储空间也较小…

【抽象类和接口】

目录 1.抽象类1.1什么是抽象类1.2抽象类语法1.3抽象类与普通类的区别 2.抽象类的特性2.1 特性2.2抽象类的作用 3.接口3.1什么是接口3.2语法规范3.3接口的使用3.4接口的特性3.5 实现多个接口3.6 接口的继承 4.接口的实例5.Clonable 接口和深拷贝5.1 浅拷贝5.2深拷贝 6. 抽象类和…

English Learning - L3 作业打卡 Lesson4 Day27 2023.5.31 周三

English Learning - L3 作业打卡 Lesson4 Day27 2023.5.31 周三 引言&#x1f349;句1: It is so crowded that we are packed like sardines – just like small fish in a can.成分划分弱读连读爆破语调 &#x1f349;句2: My supervisor at work is sometimes out to lunch.…

设计模式之database/sql 与Gorm设计原理

1.0 理解 database/sql 1.1 基本用法 - Quick Start 上面有几行错误 DSN相关知识&#xff1a; https://github.com/go-sql-driver/mysql#dsn-data-source-name https://en.wikipedia.org/wiki/Data_source_name 完整&#xff1a; 1.2 设计原理 极简接口设计原则&#xff1a; 对…

UNIX环境高级编程——高级I/O

14.1 引言 本章讨论高级I/O相关主题&#xff0c;包括&#xff1a; 非阻塞I/O&#xff1b;记录锁&#xff1b;I/O多路转接&#xff08;select、poll&#xff09;&#xff1b;异步I/O&#xff1b;readv和writev函数&#xff1b;存储映射I/O&#xff08;mmap&#xff09;。 14.…

Hesai激光雷达使用PTP时间同步

PTP是一个网络同步时钟的协议&#xff0c;全称是Precise Time Protocol&#xff0c;也称为IEEE 1588&#xff0c;其有IEEE1588v1和IEEE1588v2两个版本&#xff08;其中v1版本是为工业自动化测量和控制系统开发的&#xff0c;适用于工业局域网应用。v2版本是在v1版本的基础上&am…

Win11电脑突然没有声音了怎么办?

Win11电脑突然没有声音了怎么办&#xff1f;有用户电脑连接了音响之后&#xff0c;无论自己怎么调整都没有声音&#xff0c;那么遇到这个问题之后&#xff0c;要怎么去进行修复呢&#xff1f;如果你也遇到了没有电脑没有声音的情况&#xff0c;可以通过以下的方法来进行解决。 …

Vue (7)

文章目录 1. 单文件组件1.1 创建 .vue 文件1.2 vue 脚手架1.2.1 说明1.2.2 创建 vue 脚手架1.2.3 了解 vue_test 中的文件 1.2.4 render 函数 1.3 修改默认配置1.4 ref 属性1.5 props 配置项1.6 mixin 混入1.7 插件1.8 Scoped 样式 2. 组件化编码流程2.1 TodoList 案例总结 前言…

Pycharm设置Python每个文件开头自定义模板(带上声明字符编码、作者名、时间等)

Pycharm设置地址&#xff1a; 在File---settings---Editor---File and Code Templates---Python script 脚本里添加: 模板声明设置参考&#xff1a; # ---encoding:utf-8--- # Time : ${DATE} ${HOUR}:${MINUTE} # Author : 作者名 # Email &#xff1a;你的邮箱 # Sit…

Nginx启动,重启以及基本命令

1.启动nginx 进入nginx安装目录执行 ./sbin/nginx -c ./conf/nginx.conf 2.验证nginx配置文件是否正确 方法1. 进入nginx安装目录sbin下&#xff0c;输入命令 ./nginx -t 回显test is successful说明配置正确 方法2. 在启动nginx命令 -c 前加 -t ./sbin/nginx -t -c ./c…

一次诡异405 METHOD_NOT_ALLOWED “Request method ‘POST‘ not supported“问题排查记录

概述 任何稍微只要有一点经验的开发者都知道HTTP 405&#xff0c;表示方法不支持。如&#xff0c;本来是定义为POST接口&#xff0c;前端使用GET请求&#xff0c;就会报错。 但是我还真遇上一次405 METHOD_NOT_ALLOWED "Request method POST not supported"问题&am…

ReadDataByIdentifier(0x22)服务

ReadDataByIdentifier&#xff08;0x22&#xff09;服务 ReadDataByIdentifier服务允许客户端从一个或多个dataIdentifiers标识的服务器请求数据记录值。 客户端请求消息包含一个或多个两字节的dataIdentifier值&#xff0c;用于标识服务器维护的数据记录 允许的dataIdentifie…

【Azure】微软 Azure 基础解析(八)Azure 存储服务:探索Blob存储、队列存储、文件存储的特性与适用场景

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…

代码随想录第50天

1.买卖股票的最佳时机III&#xff1a; 动态规划五部曲详细分析一下&#xff1a; 确定dp数组以及下标的含义 一天一共就有五个状态&#xff0c; 没有操作 &#xff08;其实我们也可以不设置这个状态&#xff09;第一次持有股票第一次不持有股票第二次持有股票第二次不持有股…

2021年全国A级景区矢量分布数据(11969条)

一、景区定义 旅游景区是以旅游及其相关活动为主要功能或主要功能之一的空间或地域。本标准中旅游景区是指具有参观游览、休闲度假、康乐健身等功能&#xff0c;具备相应旅游服务设施并提供相应旅游服务的独立管理区。该管理区应有统一的经营管理机构和明确的地域范围。包括风景…

设计模式-中介者模式

中介者模式 问题背景中介者设计模式基本介绍原理 问题解决-代码示例注意事项和细节 问题背景 一提到中介&#xff0c;我们首先就能想到租房中介&#xff0c;有租房中介在我们需要租房子的时候可以给我们节省很大精力。 那没有中介我们要怎么租房呢&#xff1f; 我们可以想象一…