关于数据结构二叉树先序遍历递归的问题

各位朋友们下面是严蔚敏数据结构中的c语言版的一个二叉树先序遍历的算法:statuspreordetraverse(bitreet,status(*visit)(telem... 各位朋友们下面是严蔚敏数据结构中的 c语言版的一个二叉树先序遍历的算法:
status preordetraverse(bitree t, status(*visit)(telemtype e){

if (t){

if(visit(t->date))

if (preordertraverse(t->lchild,vist))

if(preordertraverse(t->rchild,visit)) return ok;

return error;

}else ruturn ok;
}
我一直不明白,为什么最后有return error,什么情况下会出错返回,此递归是如何运行的.希望高手帮帮忙谢谢
展开
 我来答
xiaozhu8766
2008-11-03
知道答主
回答量:18
采纳率:0%
帮助的人:0
展开全部
error前面要定义的。
#define erroe -1;

我给我的程序你参考一下:
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
#define ERROR -1;

typedef struct BitNode{
TElemType data;
struct BitNode *lchild,*rchild;//左右孩子指针
}BitNode,*BitTree;

//按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树
//构造二叉树表表示的二叉树T
void CreateBitTree(BitTree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{ T=(BitNode *)malloc(sizeof(BitNode));
T->data=ch;//生成根结点
CreateBitTree(T->lchild);//构造左子树
CreateBitTree(T->rchild);//构造右子树
}//else
}//CreateBitTree

//访问函数——打印
int visit(TElemType e)
{ printf("%c",e);
return 1;
}//visit

//先序遍历(根->左->右),visit()访问每一个树结点
//规律:最先访问data
int PreOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit))
if(PreOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//PreOrderTraverse

//中序遍历(左->根->右),visit()访问每一个树结点
//规律:在递归右指针前访问data
int InOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(InOrderTraverse(T->lchild,visit))
visit(T->data);
if(InOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//InOrderTraverse

//后序遍历(左->右->根),visit()访问每一个树结点
//规律:在递归右指针后访问data
int PostOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T){
PostOrderTraverse(T->lchild,visit);
PostOrderTraverse(T->rchild,visit);
visit(T->data);
}//if
else
return 1;
}//PostOrderTraverse

void main()
{ BitTree T;
printf("请输入二叉树的结点(空格表示空树):");
CreateBitTree(T);
printf("先序遍历的二叉树输出如下:");
PreOrderTraverse(T,visit);
printf("\n");
printf("中序遍历的二叉树输出如下:");
InOrderTraverse(T,visit);
printf("\n");
printf("后序遍历的二叉树输出如下:");
PostOrderTraverse(T,visit);
printf("\n");
system("pause");
}//main
随机因子
2008-10-29 · TA获得超过132个赞
知道答主
回答量:31
采纳率:0%
帮助的人:29.5万
展开全部
严蔚敏的书程序可读性太差,建议换本C++描述的经典数据结构书看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仙材南濯
2019-06-17 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:827万
展开全部
有哪位高手帮忙分析下以下程序:#include"iostream.h"
#define
maxnode
100
typedef
char
datatype;
typedef
struct
bitnode{
datatype
data;//存储数据信息的信息域
struct
bitnode
*lchild,*rchild;//左右孩子指针
}bitnode,*bitree;void
createbitree(bitree
*t){//创建一棵已生成左右子树的二叉树的算法char
ch;cin>>ch;if(ch=='0')(*t)=null;else{(*t)=new
bitnode;
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);}}int
inorderout(bitree
bt)
{//非递归中序遍历二叉树
bitree
stack[maxnode],p;int
top;if(bt==null)
return
1;//空树
top=-1;//栈顶指针初始化p=bt;while(!(p==null&&top==-1))
{
while(p!=null)
{
if(top
lchild;//指针指向p的左孩子结点}if(top==-1)
return
1;//栈空时结束else{p=stack[top];//从栈中弹出栈顶元素
cout<
data;top--;p=p->rchild;//指针指向p的右孩子结点}}}void
main()
//主函数{bitree
bt;int
n;cout<<"
***************二叉树***************"<
>n;switch(n){case
0:break;
case
1:createbitree(&bt);break;case
2:cout<<"中序遍历输出二叉树为:";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式