【数据结构-初阶】二叉树(1)---树的相关概念

🎈主页传送门****:良木生香

🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离


上期回顾:在上一篇文章中(这是文章链接:【数据结构-初阶】详解线性表(5)---队列),我们学习了初阶数据结构中的后一个线性表---队列,那么在初阶线性结构中线性表的内容我们就告一段落了,今天我们就进入到初阶段数据结构中的非线性表这块知识的学习.在这块知识中,我们会学习到树,但是还不学习图,这会等到我们学习C++语言的时候详细讲解

目录

一、树的相关概念

1.树的概念与结构:

2、树的相关术语

3、树的表示方法

4、树形结构在生活中的具体应用:


在学习二叉树之前,我们要先了解一下什么是树

一、树的相关概念

讲到树,我们就能联想到平时生活中所看到的植物树,那我们今天要讲的树与平时看到的树有联系吗?有的兄弟,当然有,我们今天要将的树灵感就是来源于生活中的树

生活中的树根是在地下的,分支是朝天上生长的,所以我们说树是向阳而生的,而我们今天要讲的树长这样:

1.树的概念与结构:

**树是一种非线性的数据结构,与前面讲的线性表不同,它是由****n(n>=0)**个有限节点组成一个具有层次关系的集合.我们将其称之为树是因为它看起来像是一颗倒挂的树,也就是说根是朝上的,叶子结点是朝下的.

  • 它有一个特殊的节点,叫做根节点,这个节点是没有前驱节点的
  • 除了根节点之外,剩下的其他节点被分成M(M>0)个互不相交的集合,T1,T2,T3.....Tm.其中一个集合Ti(1<Ti<M)又是一颗结构与树类似的子树.每棵子树的根节点有且只会有一个前驱,可以有0个或者多个后驱,因此,树是递归定义的.

小贴士:树形结构中,子树不能有交集,否则不是树形结构

非树形结构的像下面这样:

  • 标有问号的就是子树中有交集的,这样就不是树形结构了,如果相交了,那就是图,不是树了
  • 除了根节点之外,其他节点****有且仅有一个父节点
  • 一颗N节点的树有N-1条边

2、树的相关术语

介绍树的相关术语,我们就拿下面这张图做例子:

**父节点/双亲节点:**若一个节点含有子节点,那么这个节点成为其子节点的父节点;像上图中,A是B的父节点;

子节点/孩子节点:一个结点含有的子树的根节点成为该节点的子结点;像上图中,B是A的子结点/孩子节点

结点的度:一个结点有几个孩子,那他的度就是多少;比如A的度是6,F的度是2的等等...

树的度:一棵树中,最大结点的度称为树的度,如上图:树的度为6

叶子结点/终端结点:度为0的结点成为叶结点,如上图:B、C、H、I...等等

分支结点/非终端结点:度不为0的结点,像上图中的D、E、F、G...

兄弟结点:具有相同父结点的结点互相称为兄弟结点(亲兄弟),像上图中的B、C是兄弟结点

**结点的层次:**从根开始定义起,根为第1层,跟的子结点是第2层,以此类推;

**树的高度或者深度:****树中结点的最大层次;**像上图中的树的高度为4;

**结点的祖先:****从根到该结点所经分支上的所有结点;**像上图中,A是所有节点的祖先;

**路径:****一条从树任意结点出发,沿父结点-子结点连接,达到任意结点的序列;**比如A到Q的路径为:A-E-J-Q;H到Q的路径为:H-D-A-E-J-Q

**子孙:****以某个结点为根的子树中任以结点都称为该节点的子孙.**像上图中:所有节点都是A的子孙;

**森林:**由m(m>0)棵互补相交的树的集合称为森林

3、树的表示方法

树结构相对线性表就⽐较复杂了,要存储表⽰起来就⽐较⿇烦了,既然保存值域,也要保存结点和结 点之间的关系,实际中树有很多种表⽰⽅式如:双亲表⽰法,孩⼦表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。

在这么多方法里面,我们应该怎么选择哪个方法作为我们讲解的方法呢?我们选择孩子兄弟表示法,这也是前辈们在最初探索树的时候想出来的,因为这种方法比较容易我们理解

下面是树的结构体:

cpp 复制代码
struct TreeNode
{
struct Node* child; // 左边开始的第⼀个孩⼦结点
struct Node* brother; // 指向其右边的下⼀个兄弟结点
int data; // 结点中的数据域
};

怎么理解这个结构体呢?不着急,请看下图:

我们以这个图为例,那么这棵树在结构体中的具象化就应该是这样子的:

4、树形结构在生活中的具体应用:

树形结构在生活中有许多的应用,拿个最简单的例子来说,就像我们电脑上的文件管理器,就是树形结构的应用,文件管理都是一层一层向下管理的:

以上就是我对树的概念内容的分享了,感谢大佬们的阅读~~~~

文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读.

相关推荐
良木生香2 小时前
【数据结构-初阶】二叉树(2)---堆
c语言·数据结构·算法·蓝桥杯
KingRumn8 小时前
Linux信号之标准信号与实时信号
linux·算法
源代码•宸11 小时前
Leetcode—620. 有趣的电影&&Q3. 有趣的电影【简单】
数据库·后端·mysql·算法·leetcode·职场和发展
2301_8002561111 小时前
地理空间数据库中的CPU 和 I/O 开销
数据库·算法·oracle
一个不知名程序员www12 小时前
算法学习入门---结构体和类(C++)
c++·算法
晨晖212 小时前
简单排序c语言版
c语言·开发语言
XFF不秃头14 小时前
力扣刷题笔记-旋转图像
c++·笔记·算法·leetcode
王老师青少年编程15 小时前
csp信奥赛C++标准模板库STL案例应用3
c++·算法·stl·csp·信奥赛·lower_bound·标准模版库