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

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;}
2026年09月22日 02:08
有1个网友回答
网友(1):

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*/