Fork me on GitHub

数据结构---树和二叉树(1)

    离上次写数据结构的文章正好过了1又1/2个月,其实上个星期就把数据结构(叶核亚版)看完了,自我感觉从中吸收了30%的知识,还远远不够,打算继续再看一次,然后将自己的代码重新整理写一个类库。
    不说废话了,先把这次写完的代码总结完,再开始后面的学习。

一、树

1.定义:树是由n(n>=0)个节点组成的有限集合。n=0的树称为空树;对n>0的树T有:
有一个特殊的节点称为根节点(root),它只有直接后继节点,没有直接的前驱节点。
当n>1时,除根节点之外的其他节点分为m(m>=0)个互不相交的集合T1,T2,...Tm。其中每个集合Tm(1<=i && i<=m)本身又是一棵结构与树类同的子树。每棵子树的根节点有且仅有一个直接前驱节点,但可以有零或多个直接后继节点。

2.术语:节点、孩子节点与双亲节点、兄弟节点、祖先节点与后代节点、节点的度、叶子节点与分支节点、树的度、边、
           路径与路径长度、节点的层次、树的深度或高度、无序树于有序树、森林。

3.树的基本操作通常有以下 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 @ 2009-04-15 10:55  idoku  阅读(216)  评论(0编辑  收藏  举报