目录
树的定义和基本术语 0
二叉树 1
二叉树的定义 1
二叉树的性质 3
二叉树的存储结构 4
树和森林 5
二叉树的先|中|后序遍历算法 6
先|后|中序遍历的应用扩展 8
基于先序遍历的二叉树(二叉链)的创建 8
统计二叉树中叶子结点的数目 8
求二叉树的高度 9
释放二叉树的所有结点空间 10
删除并释放二叉树中以元素值为x的结点作为根的各子树 11
求位于二叉树先序序列中第k个位置的结点的值 11
线索二叉树 12
树和森林的遍历 13
二叉树的层次遍历 15
判断一棵二叉树是否为完全二叉树 16
哈夫曼树及其应用 17
最优二叉树(哈夫曼树) 17
哈夫曼编码 17
遍历二叉树的非递归算法 18
先序非递归算法 18
中序非递归算法 18
后序非递归算法 19
二叉树和树
树的定义和基本术语
树的递归定义
1)结点数n=0时,是空树
2)结点数n>0时
有且仅有一个根结点、m个互不相交的有限结点集——m棵子树
基本术语
结点: 叶子(终端结点)、根、内部结点(非终端结点、分支结点);
树的规模:结点的度、树的度、结点的层次、树的高度(深度)
结点间的关系:双亲(1)—孩子(m),祖先—子孙,兄弟,堂兄弟
兄弟间是否存在次序:无序树、有序树
去掉根结点
非空树森林
引入一个根结点
树的抽象数据类型定义
树特有的操作:
查找:双亲、最左的孩子、右兄弟
结点的度不定,给出这两种操作可以查找到一个结点的全部孩子
插入、删除:孩子
遍历:存在一对多的关系,给出一种有规律的方法遍历(有且仅访问一次)树中的结点
ADT Tree{
数据对象:D={ai | ai∈ElemSet, i=1,2,…,n, n≥0}
数据关系:若D为空集,则称为空树;
若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
(1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;
(2) 若D-{root}≠Ф,则存在D-{root}的一个划分D1, D2, …, Dm (m>0) (Di 表示构成第i棵子树的结点集),对任意j≠k (1≤j, k≤m) 有Dj∩Dk=Ф,且对任意的i (1≤i≤m),唯一存在数据元素xi∈Di, 有<root, xi>∈H(H表示结点之间的父子关系);
(3) 对应于D-{root}的划分,H-{<root, x1>,…, <root, xm>}有唯一的一个划分H1, H2, …, Hm(m>0)(Hi表示第i棵子树中的父子关系),对任意j≠k(1≤j,k≤m)有Hj∩Hk=Ф,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di, {Hi})是一棵符合本定义的树,称为根root的子树。
基本操作:
InitTree(&T)
操作结果:构造空树T
DestroyTree(&T)
初始条件:树T已存在
操作结果:销毁树T
ClearTree(&T)
初始条件:树T已存在
操作结果:将树T清为空树
TreeEmpty(T)
初始条件:树T已存在
操作结果:若T为空树,则返回TRUE,否则返回FALSE
TreeDepth(T)
初始条件:树T已存在
操作结果:返回树T的深度
Root(T)
初始条件:树T已存在
操作结果:返回T的根
Value(T, cur_e)
初始条件:树T已存在,cur_e是T中某个结点
操作结果:返回cur_e的值
Assign(T, &cur_e, value)
初始条件:树T已存在,cur_e是T中某个结点
操作结果:结点cur_e赋值为value
Parent(T, cur_e)
初始条件:树T已存在,cur_e是T中某个结点
操作结果:若cur_e是T的非根结点,则返回它的双亲,否则函数值为“空”
LeftChild(T, cur_e)
初始条件:树T已存在,cur_e是T中某个结点
操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空”
RightSibling(T, cur_e)
初始条件:树T已存在,cur_e是T中某个结点
操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则返回“空”
InsertChild(&T, p, i, c)
初始条件:树T已存在,p指向T中某个结点,1≤i≤p
遍历二叉树的非递归算法 来自淘豆网m.daumloan.com转载请标明出处.