说明:如果在看博客过程中有对深度,高度和层次有迷惑的,请不要着急,这是因为不同的基数问题。到底是从0开始还是从1开始算,先忽略这个问题,博客下面转载的有详细说明。
树的概念(理解即可):
树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。
![图1](https://img-blog.csdnimg.cn/img_convert/ec2a8e10176d3816760d091c41c2969c.png)
树的基本知识:
- 节点深度:对任意节点x,x节点的深度表示为根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推。如图1节点5的深度为0,节点2的深度为1,节点1的深度为2。(深度从上往下看)
- 节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度。图1中节点1,3,7的高度为0,节点2,8高度为1,节点5高度为2.(高度从下往上看)
- 树的深度:一棵树中节点的最大深度就是树的深度,也称为高度。图1的深度为2
- 父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点.如图1节点5是节点2,8的父节点
- 子节点:一个节点含有的子树的根节点称为该节点的子节点。如图1节点2,8是节点5的子节点。
- 节点的层次:从根节点开始,根节点为第0层,根的子节点为第1层,以此类推
- 兄弟节点:拥有共同父节点的节点互称为兄弟节点。如图1节点2和8是兄弟节点。
- 度:节点的子树数目就是节点的度。如图1中节点5,2的度为2,节点8的度为1,节点1,3,7的度为0
- 叶子节点:度为零的节点就是叶子节点.如1图中节点1,3,7
- 分支结点:度大于0的结点为分支结点,显然除了叶子结点之外的结点都为分支结点。如图1中节点5,2,8
- 祖先节点:对任意节点x,从根节点到节点x的所有节点都是x的祖先
- 后代:对任意节点x,从节点x到叶子节点的所有节点都是x的后代
- 森林:m颗互不相交的树构成的集合就是森林
以下内容转自 https://blog.csdn.net/weixin_41133154/article/details/80027285
https://blog.csdn.net/weixin_41133154/article/details/80027285 转载内容开始
树的基本术语最全面最易懂解释start
树的定义:
①如果树的结点个数为0,则树为空树
②如果树的结点个数为1,则该结点是被称为根结点的结点
③如果树的结点个数大于1,则必存在一个称为根的结点,它的分支下是几个互不相交的有限集合,并且这些互不相交的有限集合本身又是一棵树。
定义注释:从定义③可知,树的定义蛮有趣的,树中有树,树中还是树,所以可知树的定义是一个递归定义,从下图可以看出,如果你仔细分析过带简单循环体的递归程序,那么会知道程序的整个运行路径其实就是一棵树,所以树和递归还是有不浅的联系的。
(1)结点(node)
树的结点由数据元素及其若干分支组成,如下图所示:
(2)树和子树(subtree)
以根结点为根的树为全树(或树),以其他结点作为根结点的树为子数
所以当谈到以哪个结点为根结点,就应该知道指的是哪棵子数,以一个结点作为根结点的子数是唯一的。
(3)结点的度(degree of node)
结点的度指的是结点分支的个数,如下图所示:
(4)树的度
选取所有结点中最大的度,就是树的度,如下图所示:
(5)叶子结点(leaf node)
度为0的结点就是叶子结点,它位于树最深层,并且树只要非空,就一定存在叶子结点,如下图所示:
(6)分支结点(internal node)
度大于0的结点为分支结点,显然除了叶子结点之外的结点都为分支结点。
而且根结点也是分支结点。
(7)父节点(father node)和子结点(child node)
一个结点若干分支下的结点都为该结点的子结点(或称孩子(children)),并且,该结点称为子结点的父节点,如下:
(8)兄弟结点(brother)和堂兄弟结点
父节点下的所有子结点互为兄弟结点,如下图,B,C,D结点互为兄弟结点
堂兄弟结点:位于同一层的,并且父节点之间是兄弟结点的结点互为堂兄弟结点,上图中,E,G为堂兄弟结点,F和G也是堂兄弟结点,他们的父节点是兄弟结点。
(9)祖先(ancestor)和子孙(descendant)
这个关系就同父亲和孩子一样。从根结点到该结点路径上的所有结点都为该结点的祖先,如下图所示:
反之,C,G,H就是A的子孙,G和H都为C的子孙,H也可以称为G的子孙,不过因为G和H只隔一代,所以一般称为孩子
所有的结点都有一个公共祖先,就是根结点,但任意两个结点可以不只一个祖先,比如E和F的公共祖先有A和B
(10)路径(path)
从一个结点到另一个结点之间的边和结点构成路径,如下图:
A到H的路径包含A,C,G,H结点和连接这些结点的三条边
(11)子树根结点
如图,A的子树根结点为B,C,D。B的子树根结点为E,F,D没有子树根结点
(12)层次(level)
树是一个递归结构,所以也有层次这种概念,由层次也会引发出树的深度,就好像递归也有深度一样。结点的层次为从结点到根结点的路径中边的条数,并且认为根结点的层次为0,因为根结点到自身的路径中边的条数为0(但也有一些教科书假设根结点的层次为1,这个时候要注意书中相应的说明),如下图所示,B的层次为1,G的层次为2,H的层次为3
结点的层次有时也称为结点的深度(depth)
(13)树的深度
与树的度对应于结点的度一样,树的深度也是选取结点中的最大深度(或最大层次),下图的树的深度为3
树的深度是一个自顶向下的概念,是从根结点出发,向着叶子结点方向前进的,并且深度这个概念一般只用来描述树,当描述结点的深度时,层次更为恰当,但是用深度也无妨。
(14)结点的高度(height of node)
高度与深度不同,高度的描述是自下向顶的,而深度是自顶向下的,同一层次的结点的高度是可以不同的,下面先来介绍高度的概念。
从一个结点出发,一直到它的叶子结点的最大路径中的边的条数,就是该结点的高度,叶子结点的高度认为是0,因为从叶子结点出发,到它本身的路径只有一条,并且边数为0。下图标出了所有结点的高度,可以观察到,同一层次的叶子结点的高度不一定相同,因为它们的叶子结点的最大层次是不同的。
这里,由于A结点到叶子结点的最大路径为A->C->G->H,而不是A->B->E(F)和A->D,所以它的高度是3,因为最大路径的边数为3
(15)树的高度
树的高度就是根结点的高度,如上图所示,该树的高度为3
(16)森林(forest)
森林的概念和树的概念是密切联系的。
森林就是彼此不相交的树的集合,树也可以看成是森林共有一个根结点后的结构,如下图所示:
上图标记出来的就是三棵子树,他们构成一个(子树)森林,如果给这三棵子树共有一个结点,那么就构成一个树
这个树是A,森林是子树B,C,D的集合,可以看出森林和树是两个密切相关的概念。
https://blog.csdn.net/weixin_41133154/article/details/80027285 转载内容结束
以下内容转自 https://blog.csdn.net/qq_36667170/article/details/84142019
https://blog.csdn.net/qq_36667170/article/details/84142019 转载内容结束
树的高度和深度
深度定义是从上往下的,高度定义是从下往上的。(其实不用在意这个,反正树的深度高度怎么数都一样的)。
深度和高度涉及到结点的层数,有的教材规定根结点在第0层,有的则规定根结点在第1层。原理都是一样的,因教材而异。
树从根结点开始往下数,叶子结点所在的最大层数称为 树的深度。
有的教材对于树的高度定义是高度就是深度(层数是0123,深度=高度=3;层数是1234,深度=高度=4);而有的教材树的高度则是看一共有几层。也就是说不论根节点在第几层,树的深度都是和最大层的叶子节点一样。而树的高度只要看有几层就行了(0123是四层,1234也是四层)。
有两种说法:
- 高度就是深度
- 看层数:
如果根结点第0,层数=深度=高度-1
如果根结点第1,层数=深度=高度
图 | 左 | 右 |
---|---|---|
层数 | 从第0层开始 | 从第1层开始 |
最大层数 | 4 | 5 |
深度 | 4 | 5 |
高度(高度=深度) | 4 | 5 |
高度(数层数) | 5 | 5 |
根节点在第0层时候,按照北大数据结构视频的说法就是高度数结点数,深度数路径。从A到G,节点是5层,中间有4段路径,所以深度4,高度5。
其实也可以理解为数高度时候叶子结点从1开始数。因此空数高度0,只有一个根节点高度1。
但是在清华大学 邓俊辉数据结构书中如下:
这本书中可以看出数高度时候叶子结点是从0开始的,因此空数高度-1,只有一个根节点高度0。
结点的高度和深度
结点的深度也是从根结点开始数,是第几层也决定于根结点在第0层还是第1层。根结点的高度则取决于它的子树,该节点子树中最远的那个叶子结点作为1开始数。
B的子树是C和D,数B的高度时候,B的子树中离B最远的叶子节点是G,所以G高度为1,B高度4,D高度3。但是C是叶子节点,C没有真子树,C高度就是1。
图 | 左 | 右 |
---|---|---|
BCD高度(叶子节点>=0) | 4 1 3 | 4 1 3 |
BCD高度(叶子节点>0) | 3 0 2 | 3 0 2 |
BCD深度 | 1 2 2 | 2 3 3 |
https://blog.csdn.net/qq_36667170/article/details/84142019 转载内容结束