数据结构——树(未完成)
定义:树(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;

浙公网安备 33010602011771号