后序遍历二叉树非递归算法
void LastOrder(BiTree T)
{
InitStack(S);
BiTNode *p = T, *r = NULL;
while (p || IsEmpty(S))
{
if (p) //到最左边
{
push(S, p);
p = p->lchild;
}
else
{ //向右边
Get(S, p); //读栈顶节点(非出栈)
if (p->rchild && p->rchild != r) //如果右子树存在,且之前没被访问过
{
p = p->rchild; //向右
push(S, p); //入栈
p = p->lchild; //再向左
}
else //如果没有右子树,弹出节点并访问
{
pop(S, p);
visit(p);
r = p; //记录最近访问过的节点
p = NULL; //重置p,以防进入上面的if
}
}
}
}