数据结构非线性表之树

树的定义

  树(Tree)是 n(n≥0)个相同类型的数据元素的有限集合。树中的数据元素叫 结点(Node)。n=0 的树称为空树(Empty Tree);对于 n>0 的任意非空树 T 有:

(1)有且仅有一个特殊的结点称为树的根(Root)结点,根没有前驱结点;

(2)若n>1,则除根结点外,其余结点被分成了m(m>0)个互不相交的集合 T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm 称为这棵树的子树(Subtree)。

  由树的定义可知,树的定义是递归的,用树来定义树。因此,树(以及二叉 树)的许多算法都使用了递归。

  树的形式定义为:树(Tree)简记为 T,是一个二元组, T = (D, R)

  其中:D 是结点的有限集合;

       R 是结点之间关系的有限集合。

 

图 5.1 是一棵具有 10 个结点的树,即T={A,B,C,D,E,F,G,H,I,J}。

 

 树的相关术语

树的相关术语有以下一些:

  1、结点(Node):表示树中的数据元素,由数据项和数据元素之间的关系组 成。在图 5.1 中,共有 10 个结点。

  2、结点的度(Degree of Node):结点所拥有的子树的个数,在图 5.1 中,结 点 A 的度为 3。

  3、树的度(Degree of Tree):树中各结点度的最大值。在图 5.1 中,树的度为 3。

  4、叶子结点(Leaf Node):度为 0 的结点,也叫终端结点。在图 5.1 中,结 点 E、F、G、H、I、J 都是叶子结点。

  5、分支结点(Branch Node):度不为 0 的结点,也叫非终端结点或内部结点。 在图 5.1 中,结点 A、B、C、D 是分支结点。

  6、孩子(Child):结点子树的根。在图 5.1 中,结点 B、C、D 是结点 A 的 孩子。

  7、双亲(Parent):结点的上层结点叫该结点的双亲。在图 5.1 中,结点 B、C、 D 的双亲是结点 A。

  8、祖先(Ancestor):从根到该结点所经分支上的所有结点。在图 5.1 中,结 点 E 的祖先是 A 和 B。

  9、子孙(Descendant):以某结点为根的子树中的任一结点。在图 5.1 中,除 A 之外的所有结点都是 A 的子孙。

  10、兄弟(Brother):同一双亲的孩子。在图 5.1 中,结点 B、C、D 互为兄弟。

  11、结点的层次(Level of Node):从根结点到树中某结点所经路径上的分支 数称为该结点的层次。根结点的层次规定为 1,其余结点的层次等于其双亲结点 的层次加 1。

  12、堂兄弟(Sibling):同一层的双亲不同的结点。在图 5.1 中,G 和 H 互为 堂兄弟。

  13、树的深度(Depth of Tree):树中结点的最大层次数。在图 5.1 中,树的深 度为 3。

  14、无序树(Unordered Tree):树中任意一个结点的各孩子结点之间的次序构 成无关紧要的树。通常树指无序树。

  15、有序树(Ordered Tree):树中任意一个结点的各孩子结点有严格排列次序 的树。二叉树是有序树,因为二叉树中每个孩子结点都确切定义为是该结点的左 孩子结点还是右孩子结点。

  16、森林(Forest):m(m≥0)棵树的集合。自然界中的树和森林的概念差别很 大,但在数据结构中树和森林的概念差别很小。从定义可知,一棵树有根结点和 m 个子树构成,若把树的根结点删除,则树变成了包含 m 棵    树的森林。当然,根 据定义,一棵树也可以称为森林。

树的基本操作

  树的操作很多,比如访问根结点,得到结点的值、求结点的双亲结点、某个 子结点和某个兄弟结点。

  树的基本操作通常有以下 10 种:

  1、Root():求树的根结点,如果树非空,返回根结点,否则返回空;

  2、Parent(t):求结点 t 的双亲结点。如果 t 的双亲结点存在,返回双亲结点, 否则返回空;

  3、Child(t,i):求结点 t 的第 i 个子结点。如果存在,返回第 i 个子结点,否 则返回空;

  4、RightSibling(t):求结点 t 第一个右边兄弟结点。如果存在,返回第一个 右边兄弟结点,否则返回空;

  5、Insert(s,t,i):把树 s 插入到树中作为结点 t 的第 i 棵子树。成功返回 true, 否则返回 false;

  6、Delete(t,i):删除结点 t 的第 i 棵子树。成功返回第 i 棵子树的根结点,否 则返回空;

  7、Traverse(TraverseType):按某种方式遍历树;

  8、Clear():清空树;

  9、IsEmpty():判断树是否为空树。如果是空树,返回 true,否则返回 false;

  10、GetDepth():求树的深度。如果树不为空,返回树的层次,否则返回 0。

 

posted @ 2021-10-20 17:12  JackYgy  阅读(113)  评论(0)    收藏  举报