链式二叉树后序遍历的非递归形式,终于搞定了

来源:互联网 发布:淘宝客小程序 编辑:程序博客网 时间:2024/06/06 18:06
 

void PostTraverse(BiTree T)//非递归后序遍历二叉树
{
 Stack<BiTree> s;//用栈来保存结点
 BiTree p,lastvisit;
 p=T;
 lastvisit=NULL;
 while (p!=NULL || !s.IsEmpty())
 {
  while (p!=NULL)       //一直向左,直到遇到的最后一个结点没有左孩子
  {
   s.Push(p);
   p=p->lchild;
  }
  s.GetTop(p);       //得到栈顶的结点,但没有出栈哦
  if (p->rchild==NULL ||p->rchild==lastvisit)//如果没右子树或没有访问过
  {
   cout<<p->data;
   lastvisit=p;           //记录访问过的结点
   s.Pop(p);
   p=NULL;
  }
  else
  {
   p=p->rchild;
  }

 }
}