您的位置:首页 > 其它

(二)二叉树的抽象数据类型定义及遍历

2018-01-29 16:26 134 查看
类型名称 :二叉树

数据对象集 :一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。

操作集:



Boolean isEmpty(BinTree BT);//判别BT是否为空
voidTraversal(BinTree BT);//遍历,按某个顺序访问每一个结点
BinTree CreatBinTree();    //创建一个二叉树

//常见的遍历方法有:

voidPreOrderTraversal(BinTree
BT);//先序 ----- 根 、左子树、右子树
voidInOrderTraversal(BinTree
BT);//中序 ----- 左子树、根、右子树
voidLevelOrderTraversal(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; /*转向右子树*/
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: