树的定义
- 树是有n(n>=0)个结点的有限集,n = 0时称之为空树.在任意一颗非空树中,有且只有一个特定的称为根(Root)的结点.
- 当n>1时,其余的结点可以分为m(m > 0)个互不相交的有限集,每一个集合本身又是一棵树,并称之为根的子树,
注意:子树个数没有限制,但它们一定是互不交互的.
结点分类
结点拥有的子树成为结点的度,度为0的结点称之为叶结点或终端结点,度不为0的结点成为非终端结点或分支结点.除根结点之外,分之结点也成为内部结点.
树的度是树内各结点的度的最大值.
结点间关系
结点的子树称之为该结点的孩子,相应的,该结点成为孩子的父结点.统一父结点的孩子互称为兄弟,结点的祖先是从根结点到该结点所经分支上的所有结点.
以某结点为根的子树中任一结点都成为该结点的子孙.
树的其他概念
结点的层次是从根开始定义起,根为第一层,根的孩子为第二层.树中结点的最大层次称为树的深度或高度.
树中任意结点的子结点之间有顺序关系,这种树称为有序树.
树中任意结点的子结点之间没有顺序关系,这种树称为无序树,也称自由树.
森林是M棵互不交互树的集合.
树的存储结构
树中的某个结点的孩子可以是多个,这就意味着,无论按照何种顺序将树中所有结点储存到数组中,结点的储存位置都无法直接反应逻辑关系.
不过充分利用顺序储存和链式储存结构特点,可以实现对树的储存结构的标识.
双亲表示法
在每个结点中,都用一个指示器指示其父结点在数组中的位置
|
|
孩子表示法
每个结点中,用单链表保存孩子的位置
|
|
孩子兄弟表示法
每个结点中,设置两个指针,只想该结点的第一个孩子和此结点的有兄弟
|
|