void PostOrder2(BiTree T)
{
InitStack(S);
BiTree p=T;
BiTree r=NULL;
while(p||!IsEmpty(S))
{
if(p)
{
Push(S,p);
p=p->lchild;
}
else
{
p=GetTop(S);//先不出栈,满足条件再出栈访问
if(p->right && p->right!=r)
p=p->right;
else//满足该结点没有右子树 或者 右儿子刚出栈,则出栈访问
{
p=Pop(S);
visit(p);
r=p;//记录最近出栈的结点
p=NULL;//该结点的左右子树都已出栈,所以要继续出栈,访问其父结点
}
}
}
}