一:二叉樹的鏈表實現
typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode
{
int Data;
BinTree Left;
BinTree Right;
}
二:二叉樹的遍歷
void PreOrderTraveral(BinTree BT) //前序遍歷
{
if(BT)
{
printf("%d",BT->Data);
PreOrderTraveral(BT->Left);
PreOrderTraveral(BT->Right);
}
}
void InOrderTraveral(BinTree BT) //中序遍歷
{
if(BT)
{
InOrderTraveral(BT->Left);
printf("%d",BT->Data);
InOrderTraveral(BT->Right);
}
}
void PostOrderTraveral(BinTree BT) //後序遍歷
{
if(BT)
{
PostOrderTraveral(BT->Left);
PostOrderTraveral(BT->Right);
printf("%d",BT->Data);
}
}
void InOrderTraveral(BinTree BT) //中序遍歷的堆棧實現
{
BinTree T=BT;
Stack S=CreatStack(MaxSize);
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 PreOrderTraveral(BinTree BT) //先序遍歷的堆棧實現
{
BinTree T=BT;
Stack S=CreatStack(MaxSize);
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;
}
}
}
void LevelOrderTraveral(BinTree BT) //層次遍歷的隊列實現
{
QueneQ;
BinTree T;
if(!BT)
return;
Q=CreatQuene(MaxSize);
Add(Q,BT);
T=DelectQ(Q);
printf("%d\n",T->Data);
if(T->Left)
AddQ(Q,T->Left);
if(T->Right)
AddQ(Q,T->Right);
}
初學數據結構之二叉樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.