后序:
void postorder_1(TNode* bt)
{
Stack S;
InitStack(S);
TNode* p=bt;
TNode* r=NULL;
while(!StackEmpty(S)||p!=NULL)
{
while(p!=NULL)
{
Push(S,p);
p=p->lchild;
}
GetTop(S,p);
if(p->rchild!=NULL&&p->rchild!=r)
p=p->rchild;//转向右子树
else
{
Pop(S,p);
visit(p);
r=p;//标记右孩子已经访问过了
p=NULL;//访问完一个结点之后需要置空,不置空的话又会把这个结点压进去
}
}
}
void postorder_2(TNode* &L)
{
Stack S;
InitStack(S);
TNode* p=L;
TNode* r=NULL;
while(!StackEmpty(S)||p!=NULL)
{
if(p!=NULL)
{
Push(S,p);
p=p->lchild;
}
else
{
GetTop(S,p);
if(p->rchild!=NULL&&p->rchild!=r)
p=p->rchild;
else
王道课后习题4.3.3:编写后序遍历二叉树的非递归算法
最新推荐文章于 2022-07-23 09:13:40 发布