关于C语言实现后序非递归遍历
代码片段
void PostOrderTraversal(BinTree BT)
{
BinTree T = BT;
Stack S = CreateStack(MaxSize);
while(T||!IsEmpty)
{
while(T)
{
Push(S, T);
T = T->Left;
T->flag = 1;
}
if(!IsEmpty(S))
{
T = Pop(s);
if(T->flag == 1) // 设定标志位flag,判断是否第二次入栈
{
if(T->Right)
{
T->flag = 2; // 若是二次入栈,标志位为2
Push(S, T);
T = T->Right;
}
else
{
printf("%d", T->Data);
T = NULL;
}
}
else
{
T = Pop(S);
printf("%d", T->Data);
T = NULL;
}
}
}
}