資料結構--二叉樹遍歷
阿新 • • 發佈:2019-01-09
二叉樹結構體定義
typedef struct TreeNode *BinTree
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
}
遍歷函式
void PreOrderTraversal( BinTree BT ):先序----根、左子樹、右子樹;
void InOrderTraversal( BinTree BT ): 中序---左子樹、根、右子樹;
void PostOrderTraversal( Bin Tree BT ):後序---左子樹、右子樹、根
void LevelOrderTraversal( BinTree BT ):層次遍歷,從上到下、從左到右
前序遍歷函式(遞迴)
void PreOrderTraversal( BinTree BT ){
if(BT){
printf("%d",Bt->Data);
PreOrderTraversal( BT->Left );
PreOrderTraversal( BT->Right );
}
}
前序遍歷函式(非遞迴)
void PreOrderTraversal( BinTree BT ){
BinTree T=BT;
Stack S=CreatStack(MaxSize);
//樹不為空
//棧不為空
while(T||!isEmpty(S)){
while(T){
//節點入棧
Push(S,T);
printf("%d",T->Data);
//轉向左節點
T=T->Left;
}
if(isEmpty(S)){
//出棧
T=Pop(S);
//轉向右節點
T=T->Right;
}
}
}
層次遍歷
void LevelOrderTraversal ( BinTree BT ){
Queue Q;
BinTree T;
//空樹返回
if(!BT) return;
Q=CreatQueue(MaxSize);
AddQ(Q,BT);
while(!Empty(Q)){
T=DeleteQ(Q);
printf("%d",T->Data);
if(T->Left)AddQ(Q,T->Left);
if(T->Right)AddQ(Q,T->Right);
}
}