《大话数据结构6》—— “树的定义和基本概念”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34536551/article/details/83995063

 定义



●  树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件:

     (1)有且仅有一个特定的称为根(Root)的结点;

    (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,....,Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。

    特别地,不含任何结点(即n=0)的树,称为空树。

如下就是一棵树的结构:

树的定义之中还用到了树的概念,即递归定义。如图中的子树T1和T2就是根结点A的子树。当然D,G,H,I 组成的的树又是B结点的子树,E,J 组成的树是C结点的子树。

对于树的定义还需要注意两点:

n>0时根结点是唯一的,不可能存在多个根结点。

m>0时,子树的个数没有限制,但它们一定是互不相交的。下图中的两个结构就不符合树的定义,因为它们都有相交的子树。


基本术语


树的结点—— 包含一个数据元素及若干指向其子树的分支。

结点的度——结点所有子树的个数称为该结点的度,说白了就是一个结点后面有几个分支,有几个分支就称为该结点的度。 比如说 上图的啊A ,结点的度为2,因为它有子树 B、C,结点E的度为1。

叶子结点——度为0的结点称为叶子结点,也叫终端结点。

分支结点——度不为0的结点称为分支结点,也叫非终端结点。也叫内部结点。

树的度—— 就是这棵树中各个结点的度最大值。 就是把所有结点的度拿来比较,谁最大,谁就是树的度, 上面的树的度为3.

路径——从根结点开始, 到达某结点p所经过的所有结点成为结点p的层次路径, 有且只有一条。

孩子(child)和双亲(parents) —— 树中某个结点的子树之根称之为该结点的孩子(child),相应的,该结点称之为孩子的双亲(parents)。同一双亲的孩子称为兄弟(sibling)。 

祖先(ancestor)和子孙(descendent)——结点的祖先是从根到该结点所经分支上的所有结点。所以对于H来说,D,B,A都是它的祖先。反之,以某结点为根的子树中的任一结点都称为该结点的子孙。B的子孙有D,G,H,I。

结点的层次(Level)——从根开始定义起,根为第一层,根的孩子为第二层。若某结点在第1层,则其子树的根就在第 i +1 层。

其双亲在同一层的结点互为堂兄弟。显然在图中D,E,F都是堂兄弟,而G,H,I 与 J也是堂兄弟。

树中结点的 最大层次称为树的深度(Depth)或高度,当前树的深度为4(注:也有一些书是定义为branches的个数,此时认为深度为3)。

若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(OrderedTree);否则称为无序(UnorderedTree)。注意:若不特别指明,一般讨论的树都是有序树。

森林(Forest)是m(m≥0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。对于图1的树而言,图2的两棵子树其实就可以理解为森林。树和森林的概念相近。删去一棵树的根,就得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。
 

对比线性表与树的结构,它们有很大不同,如图:


树的存储结构


三种表示方法 :

树是一种递归结构,表示方式一般有孩子表示法、双亲表示法、和孩子兄弟表示法3种。树实现方式有很多种、有可以由广义表的递归实现,也可以有二叉树实现,其中最常见的是将树用孩子兄弟表示法转化成二叉树来实现。

猜你喜欢

转载自blog.csdn.net/qq_34536551/article/details/83995063