数据结构——树(未完成)

定义:树(tree)是n(n>=0)个节点的有限集,用于实现一对多的关系。有且只有一个根节点,其余节点可分为M个互不相交的有限集。

 

最常用树:二叉树

 

树的应用:源程序的语法结构、关联数据的挖掘算法、最优字节码的传送。

 

树结构中的基本术语:

      **节点内容:包含数据元素和若干指向其子树的分支。

      **度:节点度为结点所拥有的孩子数量;数的度为所有孩子中度最大的值

      **叶子:没有孩子的结点,也称作终端结点或外界点。

      **双亲:非孩子结点。除根结点外,所有非孩子结点也被称作内部结点。

      **孩子:拥有双亲的结点,双亲的孩子被称为孩子。

      **兄弟:双亲的孩子互为兄弟结点。

      **堂兄弟:其双亲在同一层的结点互为堂兄弟结点。

      **层次:树所拥有的梯度。根节点在第一层。

      **深度:树能达到的最大层次

      **有序树:左右孩子节点不能交换。

      **无序树:左右孩子节点可以进行交换。

      **森林:M(M>=0)棵互不相交的树的集合。

 

 

树的数据结构定义:

ADT{

    数据对象D:D是具有相同特性的数据元素的集合。

    数据关系R:若D为空集,则称为空集。

          若D只有一个元素,则R为空集,否则R = { h },h是如下二元关系。

          (1) 若D中存在唯一的被称为根的元素Root,它在h关系下无前驱;

          (2) 若D - {Root}  !=NULL , 则存在D - {Root}的一个划分,D1,D2,D3……Dm(m>=0),对任意的Di  、 Dj(i != j || i<m || j<m),Di与Dj不存在交集。且对任意的i(1<=i<=m),唯一存在数据元素Xi属于Di,有<Root , Xi>属于h。

          (3) 对应于 D - <Root>的划分, h - <Root, Xi>……<Root, Xm>,有唯一的一个划分h1、h2……hm(m>=0),对任意的 j !=k, (1<=j, K<=m),有hj和hk交集为空集。且对任意的 i (1<= i <=m),hi是Di的二元关系,(Di , {hi})是一颗符合基本定义的树,称为根Root的子树。

 

树的基本操作P:

&:从函数获得操作结果实列(对象)

1、InitTree(&T);

操作结果:构造空树T,并取得树。

 

2、DestroyTree(&T);

初始条件:树T存在。

操作结果:销毁树T。

 

3、CreateTree(&T, definition);

初始条件:definition给出树的定义。

操作结果:按definition所给定义构建树。

 

4、ClearTree(&T);

初始条件:树T存在。

操作结果:将树T清为空树。

 

5、TreeEmpty(T);

初始条件:树T存在。

操作结果:若T存在,则返回TRUE,否则返回FALSE。

 

6、Root(T);

初始条件:树T存在。

操作结果:返回T的根。

 

7、TteeDepth(T);

初始条件:树T存在。

操作结果:返回树的深度。

 

8、Value(T, cur_e);

初始条件:树T存在,cur_e是树中的某个结点。

操作结果:返回cur_e的值。

 

9、Assign(T,cur_e,value);

初始条件:树T存在,cur_e是树中某个结点

操作结果:结点cur_e赋值为value。

 

10、Parent(T,cur_e);

初始条件:树T存在,cur_e是树中某个结点。

操作结果:若cur_e是树中的非根结点,则返回它的双亲,否则函数返回空。

 

11、LefrtChild(T,cur_e);

初始条件:树T存在,cur_e是T中的某个结点。

操作结果:若cur_e是非叶子节点,则返回它的最左孩子,否则函数返回空。

 

12、RightSibling(T,cur_e);

初始条件:树T存在,cur_e是T中某个结点。

操作结果:若cur_e拥有右兄弟,则返回它的右兄弟,否则函数值为空。

 

13、InsertChild(&T, &p,i ,c);

初始条件:树T存在,p指向T中某个结点,1 <= i <= p所直结点的度+1,非空树c与T不想交。

操作结果:插入c为T中p指结点的第i棵子树。

 

14、DeleteChild();

初始条件:树T存在,p指向T中某个结点,1<= i <= p指结点度。

操作结果:删除T中p所指结点的第i棵子树。

 

15、TraverseTree(T , Visit());

初始条件:树T存在,Visit是对结点操作的应用函数。

操作结果:按某种次序对T的每一个节点调用函数Visit()一次至多一次。一旦Visit()失败,则操作失败。

}ADT Tree;

posted @ 2018-11-01 20:35  怪兽不纯粹  阅读(151)  评论(0)    收藏  举报