树的定义
树是n(
n
≥
0
n\geq 0
n≥0)个结点的有限集。
若
n
=
0
n=0
n=0,称为空树;
若
n
>
0
n>0
n>0,则它满足如下两个条件:
(1).有且仅有一个特定的称为根的结点;
(2)其余结点可分为m(
m
≥
0
m\geq 0
m≥0)个互不相交的有限集T1,T2,T3,…,Tm,其中每一个集合本身又是一棵树,并称为根的子树。
显然,树的定义是一个递归的定义。
树一般表示为一个层次结构,如下图,
除此以外,树还可以表示为集合结构,凹入方式以及广义表的方式,
树的基本术语
现有一树的示意图如下,
关于上图树结构,有以下相关术语:
- 结点:数据元素以及指向子树的分支。图中的A,B,C等都是结点。
- 根结点:非空树中无前驱结点的结点。图中的A结点。
- 结点的度:结点拥有的子树数。图中A结点有3个子树,其度为3。
- 树的度:树内各结点的度的最大值。上图中树的度为3。
- 叶子结点(终端结点):度为0的结点。图中的F,I,J等都是叶子结点。
- 分支结点(非终端结点):度不为0的结点。A,B,C,D等都是分支结点。
- 内部结点(中间结点):根结点以外的分支结点。B,C,D等都是内部结点。
- 结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。图中,E是L的双亲,L是E的孩子。
- 有一些结点,它们有共同的双亲,则称这些结点为兄弟结点。图中的H,I,J就是兄弟结点。
- 双亲在同一层上的结点称为堂兄弟结点。图中的G,H就是堂兄弟结点。
- 结点的祖先:从根到该结点所经分支上的所有的结点。A,D,H结点都是结点M的祖先。
- 结点的子孙:以某结点为根的子树中的任一结点。
- 树的深度:树中结点的最大层次。图中的树的深度为4。
- 有序树:树中结点的各子树从左至右右次序。
- 无序树:树中结点的各子树无次序。
- 森林:是m( m ≥ 0 m\geq 0 m≥0)棵互不相交的树的集合。把根结点删除树就变成了森林;一棵树可以看成是一个特殊的森林;给森林中的各子树加上一个双亲结点,森林就变成了树。
树一定是森林,而森林不一定是树。
树与线性结构的比较
线性结构 | 树结构 |
---|---|
第一个数据元素(无前驱) | 根结点(无双亲,只有一个) |
最后一个数据元素(无后继) | 叶子结点(无孩子,可以有多个) |
其他数据元素:一个前驱,一个后继 | 其它结点(中间结点):一个双亲,多个孩子 |
一对一 | 一对多 |