采用堆栈实现
1.先序遍历
void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S=CreatStack(MaxSize);
while(T || !IsEmpty(S))
{
while(T)//T存在就压栈,遍历其左子树
{
Push(S,T);
T=T->Left;
}
if(!IsEmpty(S))//压入的全部弹出来
{
T=Pop(S);
printf("%d\n",T->Data);
T=T->Right;//最后将T变成了T的右子节点
}
}
}
2.中序遍历
void PreOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S=CreatStack(MaxSize);
while(T || !IsEmpty)(S){
while(T){
printf("%d\n",T->Data);
Push(S,T);
T=T->Left;
}
if(!IsEmpty(S)){
T=Pop(S);
T=T->Right;
}
}
}
3.后序遍历(待补)
原文:http://www.cnblogs.com/lcpl96/p/5730073.html