/*
后序遍历二叉树
思路:
1,若当前结点没有左右孩子,则访问并出栈
2,若当前结点有左孩子或右孩子,并且孩子被访问过,则访问并出栈(若当前结点有左右孩子,只要有一个孩子已被访问,那么它的两个孩子都已被访问,这与入栈顺序有关,它的孩子在栈中一定在它的上方)
3,若当前结点有左孩子或右孩子,并且都没有被访问,那么先将右孩子入栈,再将左孩子入栈
*/
void beh_Order(BiTree T)
{
InitStack(S);
BiTree pCur,pPre=NULL,p;
Push(s,T);
while(!IsEmpty(S)){
pCur = getTop(stack);
if((pCur->lchild==NULL && pCur->rchild==NULL) ||
(pPre!=NULL && (pCur->lchild==pPre || pCur->rchild==pPre)))
{
visit(pCur);
Pop(stack,p);
pPre = pCur;
}
else
{
if(pCur->rchild != NULL)
Push(stack,pCur->rchild);
if(pCur->lchild != NULL)
Push(stack,pCur->lchild);
}
}
}