数据结构与算法—C语言描述 树和二叉树的概念和定义

数据结构与算法——C语言描述 个人笔记 树和二叉树 前言

在生活中,线结构是最基本并且也是最常用的,但是有许多逻辑关系并不是简单的线性关系,在实际的场景中,往往存在一对多甚至是多对多的情况。

这时就需要非线性结构了,而树结构则是一类重要的非线性结构,树是以分支关系定义的层次结构,并且在现实生活中有广泛的应用。

比如说人类社会的家谱:

IMG_0892_20200429-221022_.JPG

满 门 忠 烈

机构里的职级关系也可以用树表示:

98__U6A7Q_T15K13_8_4_J4.png

还有许多抽象的东西也可以表示成一棵树,比如说操作系统中的文件目录的组织结构、一本书的目录:

TWBO_92A`988U5GGJ0_E@_Y.png

这种结构类似于自然界中的树一样,从根里衍生出许多枝干,再从枝干中衍生出许多更小的枝干,最后衍生出更多的叶子。

树的概念和定义 树的定义

树(Tree)是n(n>=0)个结点的有限集。

​ 当n=0(即无结点)时,称为空树,空树是树的特例。
​ 当n>0时为非空树,对于非空树:

必有且只有一个称之为(Root)的结点。

除根结点以外的n-1个结点可以划分为m个根的子树(SubTree)。

V_HQOJGZBAXT7U_WP3_V_TS.png

树其实也是一种递归的实现,即树的定义之中还用到了树的概念。

对比线性表和树的结构,他们有很大的不同。

线性结构 树结构
第一个数据元素:无前驱   根结点:无双亲,唯一  
最后一个数据元素:无后继   叶结点:无孩子,可以多个  
中间元素:一个前去一个后继   中间节点:一个双亲多个孩子  
树的固有特性

非空树至少有一个结点,只有一个结点的树称为最小树,这个结点称为树的根结点或者简称为树根

在含有多个结点的树中,除了根结点以外,其余的结点构成若干棵子树(一棵树是由若干个子树构成的),各子树间互不相交。

avatar

图中的两个结构就不符合定义,因为他们都有相交的子树。

每颗子树除了根结点以外,每个节点有且只有一个直接前驱,但可以有0到多个直接后继。

树的基本术语

结点:树中的一个个独立单元。包含一个数据元素和若干指向其他节点的分支信息。

结点的度(De-gree):一个结点的子树个数。

树的度:树内各结点度的最大值。

4JQA@P3DE9_4WPMWU5UX2_F.png

因为这棵树结点的度的最大值是结点D的度,为3,所以树的度也为3。

叶结点(Leaf):度为0的节点,即无后继的结点称为叶结点或终端结点

分支结点:度不为0的结点,又称为非终端结点,除根结点外,非终端节点也称为内部节点

结点的层次(Level):从根结点开始定义,根结点的层次为1,根的直接后继的层次为2,依此类推。

结点的层序编号:将树中的结点按照从上到下,同层按照从左到右的次序排成一个线性序列,依次给他们编以从1开始的连续的自然数。

树的高度/深度(Depth):树中所有结点的层次的最大值,图中的树深度为4。

GZ_N61Q_S11WWHO7_GBB_UK.png

空树的高度为0。

只有根结点的树的高度为1。

森林(Forest):m(m>=0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。将一棵非空非最小树的树根结点删去,树就变成一个森林。

孩子结点(Child):一个结点的直接后继称为该结点的孩子节点。

双亲结点(Parent):一个结点的直接前驱称为该节点的双亲结点。

兄弟结点(Sibling):同一双亲结点的孩子之间互相称为兄弟结点。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsypy.html