二叉树结构体定义
typedef struct TreeNode *BinTree
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
}
遍历函数
void PreOrderTraversal( BinTree BT ):先序----根、左子树、右子树;
void InOrderTraversal( BinTree BT ): 中序---左子树、根、右子树;
void PostOrderTraversal( BinTree 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);
}
}