数组实现
一般用于完全二叉树,实现略。链表实现
typedef struct treeNode{
ElementType Data;
treeNode *Left;
treeNode *Right;
}TreeNode;
void PreOrderTraversal(TreeNode *BT) //先序遍历,非递归实现利用stack
{
if(BT)
{
printf(“%d”, BT->Data);
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
void InOrderTraversal(TreeNode *BT) //中序遍历,非递归实现利用stack
{
if( BT )
{
InOrderTraversal( BT->Left );
printf(“%d”, BT->Data);
InOrderTraversal( BT->Right );
}
}
void PostOrderTraversal(BinTree BT) //后序遍历,非递归实现利用stack
{
if( BT )
{
PostOrderTraversal(BT->Left);
PostOrderTraversal( BT->Right);
printf(“%d”, BT->Data);
}
}
void LevelOrderTraversal(BinTree BT) //层序遍历,利用队列
{
Queue Q;
BinTree T;
if(!BT)
return;
Q = CreatQueue(MaxSize);
AddQ(Q, BT);
while(!IsEmptyQ(Q))
{
T = DeleteQ(Q);
printf(“%d\n”, T->Data);
if(T->Left)
AddQ(Q, T->Left);
if(T->Right)
AddQ(Q, T->Right);
}
}
int PostOrderGetHeight(BinTree BT) //求二叉树高度
{
int HL, HR, MaxH;
if(BT)
{
HL = PostOrderGetHeight(BT->Left);
HR = PostOrderGetHeight(BT->Right);
MaxH =(HL > HR)? HL : HR;
return (MaxH + 1);
}
else
return 0;
}