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;
}
我想要的是非递归算法,请指教
追答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
后序的还没时间写,不过大体差不多,自己体会一下应该能写出来