求高手编写二叉树的非递归先序遍历和后序遍历的代码,要求和下面给出的中序遍历类似的做法,程序如下:

Status InOrder(BiTree T,Status(*Visit)(TElemType e)) // 非递归中序遍历
{
Stack S;
BiTree p;
InitStack(S); p=T;
while ( p || StackEmpty(s) )
{
if (p)
{ Push(S,p); p=p->lchild;}
else{
Pop(S,p); if(!Visit(p->data))return ERROR;
p=p->rchild;
}
}
return OK;
}

Status PreOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{//先序遍历二叉树T的递归算法
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}else return OK;
}

void PostOrderTraverse(BiTree bt)
{//后序遍历二叉树的递归算法
if(bt){
PostOrderTraverse(bt->lchild); /* 后序遍历根结点 */
PostOrderTraverse(bt->rchild);/* 访问根结点 */
printf("%c",bt->data); /* 后序遍历右子树*/
}
} /* Postorder*/追问

我想要的是非递归算法,请指教

追答

void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{
InitStack(S);
Push(S,T); //根指针进栈
while(!StackEmpty(S))
{
while(Gettop(S,p)&&p)
{
visit(p->data);
push(S,p->lchild);
} //向左走到尽头
pop(S,p);
if(!StackEmpty(S))
{
pop(S,p);
push(S,p->rchild); //向右一步
}
}//while
}//PreOrder_Nonrecursive
后序的还没时间写,不过大体差不多,自己体会一下应该能写出来

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答