树和二叉树
树的表现形式
- 倒悬树
- 嵌套集合
- 广义表形式
- 凹入法表示显示
树的抽象数据类型定义
ADT Tree{
数据对象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),对于任意j≠k(1≤j,k≤m)有Dj∩Dk=NULL,且对任意的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=NULL,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。
基本操作P:
InitTree(&T);
操作结果:构造空树T.
DestroyTree(&T);
初始条件:树T存在。
操作结果:销毁树T.
CreateTree(&T,definition);
操作条件:definition给出树T的定义。
操作结果:按definition构造树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
二叉树的存储结构
- 顺序存储结构
- 链式存储结构
- 二叉链表节点
- 三叉链表节点
二叉树的遍历
- 先序遍历
- 中序遍历
- 后序遍历
线索二叉树
树的存储结构
- 顺序存储结构(双亲表示法)
- 孩子链表示法
- 定长节点结构
- 不定长节点结构
- 复合链表结构
- 孩子兄弟表示法(二叉树表示法)
森林和二叉树的转换
树和森林的遍历
- 先序遍历
- 后序遍历