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

article/2025/8/26 20:51:51

前言:本章内容主要是数据结构中树与二叉树的基本概念、结构特点及性质的引入。


文章目录

      • 树的概念
        • 树的特点:
        • 树的常用术语:
        • 树的表示:
          • 代码创建:
        • 树在实际中的应用:
      • 二叉树的概念
      • 特殊的二叉树
        • 满二叉树
        • 完全二叉树
      • 二叉树的性质及其推导:
      • 练习题:
          • 习题1:
          • 习题2:
          • 习题3:


树的概念

数据结构中的定义的树比较有趣,它是我们所见真实树的倒置,然后再抽象的一种结构,比较有意思。同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、企业的组织架构等等。

image-20210902134714132

image-20210902134732937

树是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。


树的特点:

1.每个结点有零个或多个子结点;
2.没有父结点的结点为根结点;
3.每一个非根结点只有一个父结点;
4.每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树;


树的常用术语:

1.根结点:没有双亲节点的结点

2.孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点

3.双亲结点:若一个节点含有子节点,则这个节点称为其子节点的父节点

4.节点的度:一个节点含有的子树的个数称为该节点的度

5.叶结点:度为0的结点称为叶结点,也可以叫做终端结点

6.分支结点:度不为0的结点称为分支结点,也可以叫做非终端结点

7.结点的层次:从根结点开始,根结点的层次为1,根的直接后继层次为2,以此类推

8.结点的层序编号:将树中的结点,按照从上层到下层,同层从左到右的次序排成一个线性序列,把他们编成连续的自然数

9.树的度:树中所有结点的度的最大值

10.树的高度(深度):树中结点的最大层次

11.森林:m(m>=0)个互不相交的树的集合,将一颗非空树的根结点删去,树就变成一个森林;给森林增加一个统一的根结点,森林就变成一棵树

12.兄弟结点:同一双亲结点的孩子结点间互称兄弟结点。


树的表示:

“左孩子右兄弟”表示法

image-20210902135556658

代码创建:
typedef int DataType;typedef struct node 
{struct node* child;       //指向左孩子结点struct node* brother;     //指向下一个兄弟结点DataType data;            //结构中的数据域,存储当前结点数据
}node;

树在实际中的应用:

比如文件系统中的目录结构

image-20210902140409615


二叉树的概念

一种特殊的树,见名知意,只有两个分叉的树。特点是二叉树的度最大只能为2,也就是说每个结点的子节点最多只能有两个。

image-20210903173144711


特殊的二叉树

满二叉树

核心点是 “满”

概念:每一层的结点都达到最大值**,且第n层的结点数量符合公式2^(n-1)**,层数是从1开始。

image-20210903174116425

1.定义: 高度为h,并且含有(2^h)-1个结点的二叉树
2.对于编号为 i 的结点,如果有双亲,双亲为 i/2 向下取整;如果有左孩子,左孩子编号为 2i,如果有右孩子,右孩子编号为 (2i + 1)


完全二叉树

概念:对于层数(n>=2)的树,其n-1层符合满二叉树,第n层结点必须满足从左向右都连续。

比如:

image-20210903174022344

1.若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
2.如果有度为 1 的结点,那只可能有一个,且该节点只有左孩子,而无右孩子


二叉树的性质及其推导:

性质1:二叉树第i层上的结点数目最多为 2^{i-1} (i≥1)

证明:下面用"数学归纳法"进行证明。
(01) 当i=1时,第i层的节点数目为2{i-1}=2{0}=1。因为第1层上只有一个根结点,所以命题成立。
(02) 假设当i>1,第i层的节点数目为2^{i-1}。这个是根据(01)推断出来的!
下面根据这个假设,推断出"第(i+1)层的节点数目为2{i}“即可。
由于二叉树的每个结点至多有两个孩子,故"第(i+1)层上的结点数目” 最多是 “第i层的结点数目的2倍”。 即,第(i+1)层上的结点数目最大值=2×2^{i-1}=2{i}。
故假设成立,原命题得证!

性质2:深度为k的二叉树至多有2^{k}-1个结点(k≥1)

证明:在具有相同深度的二叉树中,当每一层都含有最大结点数时,其树中结点数最多。利用"性质1"可知, 深度为k的二叉树的结点数至多为:
20+21+…+2k-1=2k-1
故原命题得证!

性质3:包含n个结点的二叉树的高度至少为log2 (n+1)

证明:根据"性质2"可知,高度为h的二叉树最多有2^h–1个结点。反之,对于包含n个节点的二叉树的高度至少为log2(n+1)。

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)=“0度结点数(n0)” + “1度结点数(n1)” + “2度结点数(n2)”。由此,得到等式一。
(等式一) n=n0+n1+n2
  另一方面,0度结点没有孩子,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:n1+2n2。此外,只有根不是任何结点的孩子。故二叉树中的结点总数又可表示为等式二。
(等式二) n=n1+2n2+1
由(等式一)和(等式二)计算得到:n0=n2+1。原命题得证!

性质5:

树的边的个数比节点数少一个,节点个数于节点边的关系: N个节点的树有N-1个边.

边与度的关系:N - 1 = 0N0+1N1 + 2 * N2+3N3+……+KNK

练习题:

习题1:

image-20210904144557131

image-20210904144634313

习题2:

image-20210904144721257

image-20210904144732793

习题3:

image-20210904144754620

image-20210904144804334


数据结构的树与二叉树基本概念、结构特点及性质的内容到此介绍结束了,下一章将会通过代码实现堆,并介绍TopK问题,敬请期待吧!感谢您的阅读!!!如果内容对你有帮助的话,记得给我点个赞——做个手有余香的人。


http://chatgpt.dhexx.cn/article/cNmFKHAx.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的网速测试工…

限制浏览器网速

需求:限制浏览器网速,拉长请求时间,方便验证请求loading状态是否添加成功。 ps:一般建议给弹窗/按钮增加loading状态,防止重复点击之后多次请求 解决方案:控制台(f12)-网络(Network) No throttling 无限制…

使用chrome进行慢网速测试

前言 在开发的时候,有这么一种情况,点击一个按钮调用一个接口生成数据,之后刷新页面,但是由于网络慢的原因,能够多次点击,但是自己的网络模拟不了很慢的情况,怎么办呢? 使用chrome…