【数据结构】二叉树的概念 | 满二叉树和完全二叉树 | 二叉树的基本性质

article/2025/8/26 21:02:26

前言:

在上一章中我们正式开启了对数据结构中树的讲解,介绍了树的基础。本章我们将学习二叉树的概念,介绍满二叉树和完全二叉树的定义,并对二叉树的基本性质进行一个简单的介绍。本章附带课后练习。

🔗 链接:【数据结构】树的概念与结构


0x00 概念

📚 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可以为 0,但是度最大为 2 。 

📜 一颗二叉树是节点的一个有限集合,该集合:

     ① 由一个根节点加上两颗被称为左子树右子树的二叉树组成     

     ② 或者为空

🔺 观察上图我们可以得出如下结论:

     ① 二叉树不存在度大于 2 的节点,换言之二叉树最多也只能有两个孩子。

     ② 二叉树的子树有左右之分,分别为左孩子右孩子次序不可颠倒,因此二叉树是有序树。

📌 注意:对于任意的二叉树都是由以下几种情况复合而成的:

0x01 满二叉树

📚 定义:一个二叉树,如果每一层的节点数都达到了最大值(均为2),则这个二叉树就可以被称作为 "满二叉树" 。

📜 换言之,如果一个二叉树的层数为 h,且节点总数是 2^h - 1 ,则他就是一个满二叉树。

🔺 计算公式:

 ① 已知层数求总数:N = 2^h-1

 ② 已知总数求层数: h = log_2(N+1)

❓ 十亿个节点,满二叉树是多少层?

💡  2^3^0 ≈ 10亿多

0x02 完全二叉树

📚 定义:对于深度为 K 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 K 的满二叉树中编号从 1 至 n 的结点一一对应时称之为完全二叉树。

📜 前 h - 1 层是满的,最后一层不满,但是最后一层从左到右是连续的。

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。所以,满二叉树是一种特殊的完全二叉树(每一层节点均为2)。

📚 常识:

① 完全二叉树中,度为 1 的最多只有 1 个。

② 高度为 h 的完全二叉树节点范围是   [ 2^{h-1} - 1 + 1, 2^{h} - 1 ]  

0x03 二叉树的性质

📚 四点规则:

 ① 若规定根节点的层数为 1 ,则一颗非空二叉树的第 i 层上最多有 2^{(i-1)} 个节点。

 ② 若规定根节点的层数为 1 ,则深度为 K 的二叉树最大节点数是 2^h-1 .

 ③ 对任何一颗二叉树,如果度为 0 其叶子结点个数为 n_0 ,度为 2 的分支节点个数为 n_2 ,则有  n_0 = n_2 + 1 。换言之,度为 0 的永远比度为 2 的多一个叶子结点。

 ④ 若规定根节点的层数为 1 , 具有 n 个节点的满二叉树的深度  K = log_2 (n+1)   (log是以2为底,n+1的对数)

📚 对于有 n 个节点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从 0 开始编号,则对于序号为 parent 的节点有:

(非完全二叉树,也可以用数组存放,但会浪费很多空间)

假设 parent 是父节点在数组中的下标,此公式仅适用于完全二叉树:

① 求左孩子: leftChild = parent * 2 + 1

② 求右孩子:rightChild = parent*2+2

③ 求父亲(假设不关注是左孩子还是右孩子): 

                      parent = \frac{child-1}{2}   

④  判断是否有左孩子:  2*parent+1\geq n  

⑤  判断是否由右孩子:  2*parent+2 \geq n   

 💭 PS:二叉树不一定要标准,比如这个其实也是二叉树:


课后练习:

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )

     A.  不存在这样的二叉树

     B.  200

     C.  198

     D.  199

2. 在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

     A.  n

     B.  n+1

     C.  n-1

     D.  n/2

3.  一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )

     A.  11

     B.  10

     C.  8

     D.  12

5.  一个具有767个节点的完全二叉树,其叶子节点个数为()

     A.  383

     B.  384

     C.  385

     D.  386


参考资料:

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

📌 笔者:王亦优

📃 更新: 2021.11.24

❌ 勘误: 无

📜 声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

本篇完。


http://chatgpt.dhexx.cn/article/7F50k45q.shtml

相关文章

树与二叉树基本概念与性质

树的基本概念 基本概念 树的度—— 一棵树中最大的结点度数 双亲—— 孩子结点的上层结点叫该结点的双亲 兄弟—— 同一双亲的孩子之间互成为兄弟 祖先—— 结点的祖先是从根到该结点所经分支上的所有结点 子孙—— 以某结点为根的子树中的任一结点都成为该结点的子孙 结…

【数据结构】 树与二叉树的基本概念、结构特点及性质

前言:本章内容主要是数据结构中树与二叉树的基本概念、结构特点及性质的引入。 文章目录 树的概念树的特点:树的常用术语:树的表示:代码创建: 树在实际中的应用: 二叉树的概念特殊的二叉树满二叉树完全二叉…

二叉树的基本性质

一、二叉树的定义: 二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 如图所示为一颗二叉树: ​ 二、二叉树的基本性质: 1、…

B+树叶子结点到底存储了什么?

首先MYSQL默认InnoDB引擎,该引擎默认B树;先说结论:B树叶子结点存储的是主键KEY或者具体数据。分情况讨论: 主键KEY 比如说user_name是个索引,当执行该SQL:select * from user_info where user_name xiao…

二叉树叶子结点,非叶子节点以及深度的计算

二叉树叶子结点的计算 //统计叶子结点的数目 int LeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && !T->rchild) {return 1;} else {return LeafNum(T->lchild) LeafNum(T->rchild);} }二叉树非叶子节点的计算 //统计非叶子结点的数目 i…

叶子结点

叶子结点 叶子结点是离散数学当中的概念。一棵树当中没有子结点(即度为0)的结点,称为叶子结点,简称“叶子”。 叶子是指度为0的结点,又称为终端结点。 叶子结点 就是度为0的结点 就是没有子结点的结点 n0:…

Pytorch 叶子张量 leaf tensor (叶子节点) (detach)

在Pytorch中,默认情况下,非叶节点的梯度值在反向传播过程中使用完后就会被清除,不会被保留。只有叶节点的梯度值能够被保留下来。 对于任意一个张量来说,我们可以用 tensor.is_leaf 来判断它是否是叶子张量(leaf tenso…

Pytorch学习笔记(一)——自动求导和叶子节点

一、什么是叶子节点 PyTorch中的张量tensor有一个属性是is_leaf,当is_leaf为True时,改tensor是叶子张量,也叫叶子节点。 二、叶子节点的作用 PyTorch有自动求导的功能, 当requires_gradTrue时,PyTorch会自动记录运算…

数据结构-树:根节点、子节点、叶子节点是什么?

前言:这个属于数据结构:树。 下面给个例子图解释(根节点、子节点、叶子节点)。 上图数字 1、3、7是叶子节点;(因为他们下面没有分叉出子节点,所以称为:叶子节点)【度为0】…

数据结构 - 树

树 (1)相关概念 兄弟节点:节点的父节点是同一个节点,所以它们之间互称为兄弟节点。 根节点:没有父节点的节点叫作根节点 叶子节点:没有子节点的节点叫作叶子节点或者叶节点。 节点的高度:节…

根节点、子节点、叶子节点是什么?

前言:这个属于数据结构:树。 下面给个例子图解释(根节点、子节点、叶子节点)。 上图数字 1、3、7是叶子节点;(因为他们下面没有分叉出子节点,所以称为:叶子节点)【度为0】…

弱网、2G、3G、4G测试

1.各项指标 教程指引:弱网测试教程 2.概念介绍 Bandwidth(带宽)、Utilistation(利用百分比)、Round-trip(往返延迟)、MTU(最大传输单元) 3G:300k-2Mbps左…

简单实用Chrome 日常开发功能详解,帮助你上班摸鱼

chrome是目前开发过程中一骑绝尘的浏览器,占有绝对领导地位。其强大的功能和生态圈,让很多开发者爱不释手。但很多的开发者使用chrome还是停留在F12打开控制台查看log、检查元素或者debug打断点阶段,其实chrome的强大的功能远远超过我们的想象…

小米路由器3G如何解决USB3.0 5G WiFi速度慢的问题

经常玩电脑,希望家里有个轻 nas,小米路由器是一个不错的选择,tbw买了一个小米路由器3G看重的是快速的速度(usb3.0 5G Wifi),及小米的可拓展性,使用usb3.0的usb接口,且使用5gb网速&am…

浏览器通过f12来限制网速

浏览器可以使用F12开发者工具来模拟网速的快慢。 打开需要测试的网站,点击F12,再点击选项里的network-no throttling,展示的有几种,offline,快3g,慢3g,或者自定义 点击add可以自定义网速&#…

移动网速测试软件,网速测试大师APP

网速测试大师APP是一款专业的手机网络测试应用,支持一键测速,精准快速,还能全方位分析网速,Wifi和移动网络全检测,30秒测速当前网络状况,做随时随地的测速专家。 该软件整个测速过程精准又快速,…

android 显示网速,随着掌握联网状态 Android手机如何显示实时网速

很多时候手机信号栏明明显示正在联网而且图标也显示正在下载上传中,但就是打不开网页。实际上,此时可能正处于4G→3G切换状态而出现了短暂的断网。那么,如何才能准确掌握手机当前的联网状态呢? 答案很简单,就是通过手机…

Fiddler工具的弱网模拟2G/3G/4G

日常测试工作中,C端用户会因信号和设备网络原因,出现一些恶劣网络的状态,然后出现奇奇怪怪的丢包、重传、UI空白、UI绘制异常等问题,就需要测试人员去模拟这类弱网环境去重现用户反馈的问题,以方便开发同学解决和调优加…

网速测试大师的软件怎么回事,网速测试大师

手机网速测试大师是一款手机网络测试软件,通过手机网速测试大师你可以直接测试你手机的网络速度,无论是WIFI还是手机移动网络都可以检测,让你更加了解你的手机网络。 软件介绍 网速测试大师是一款热度仅次于Ookla Speedtest. net的网速测试工…