类型名称 :二叉树
数据对象集 :一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。
操作集:
Boolean isEmpty
(
BinTree BT
);
//判别BT是否为空
void
Traversal
(
BinTree BT
);
//遍历,按某个顺序访问每一个结点
BinTree CreatBinTree
();
//创建一个二叉树
//常见的遍历方法有:
void
PreOrderTraversal
(
BinTree BT
);
//先序 ----- 根 、左子树、右子树
void
InOrderTraversal
(
BinTree BT
);
//中序 ----- 左子树、根、右子树
void
LevelOrderTraversal
(
BinTree BT
);
//后序遍历-----左子树、右子树、根
(1)先序遍历
遍历过程:1、访问根节点 。2、访问左子树。3、访问右子树。
void PreOrderTraversal(BinTree BT)
{
if(BT){
printf("%d",BT->Data);
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
(2)中序遍历
遍历过程:1、访问左子树。2、访问根节点。3、访问右子树
void InOrderTraversal(BinTree BT) //中序遍历
{
if(BT){
InOrderTraversal(BT->Left);
printf("%d",BT->Data);
InOrderTraversal(BT->Right);
}
}
(3)后序遍历
遍历过程:1、访问左子树。2、访问右子树。3、访问根节点
void LevelOrderTraversal(BinTree BT)//后序遍历
{
if(BT){
LevelOrderTraversal(BT->Left);
LevelOrderTraversal(BT->Right);
printf("%d",BT->Data);
}
}
中序遍历的非递归算法
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Right; /*转向右子树*/
}
}
}
先序遍历非递归算法
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
T = T->Right; /*转向右子树*/
}
}
}