c++二叉树遍历程序:输入0或1都报错,求大神帮忙看看

#include<iostream>usingnamespacestd;#definen8typedefstructnode{chardata;structnode*le... #include<iostream>
using namespace std;
#define n 8
typedef struct node
{
char data;
struct node * left;
struct node * right;
}Node;

char pre[n],ino[n],post[n];
Node *findchild1(char *a,int i1,int j1,char *b,int i2,int j2)
{
if(i1>j1||i2>j2)return NULL;
Node *p=new Node;
int i;
p->data=a[i1];
cout<<p->data<<" ";
for(i=i2;i<=j2;i++)
{
if(b[i]==a[i1])break;
}
cout<<i<<endl;
p->left=findchild1(a,i1+1,i1+i-i2,b,i2,i-1);
p->right=findchild1(a,i1+i-i2+1,j1,b,i+1,j2);
return p;
}

Node *findchild2(char *a,int i1,int j1,char *b,int i2,int j2)
{
if(i1>j1||i2>j2) return NULL;

Node *p=new Node;
int i;
p->data=a[j1];
for(i=i2;i<=j2;i++)
{
if(b[i]==a[j1])break;
}
p->left=findchild2(a,i1,i1+i-i2-1,b,i2,i-1);
p->right=findchild2(a,i1+i-i2,j1-1,b,i+1,j2);
return p;
}
void preorder(Node *t)
{
if(t!=NULL)
{
cout<<t->data<<" ";
preorder(t->left);
preorder(t->right);
}
}

int main()
{
Node *head,*t;
int y,z;
printf("0:已知前序和中序求后序遍历:\n");
printf("1:已知中序和后序求前序遍历:\n");
printf("请输入y:\n");
scanf("%d",y);
switch(y)
{case 0:
for(z=0;z<n;z++)
scanf("%c", pre[z]);
for(z=0;z<n;z++)
scanf("%c",ino[z]);
head=findchild1(pre,0,n-1,ino,0,n-1);
printf("后序遍历为:");
break;
case 1:
for(z=0;z<n;z++)
scanf("%c", post[z]);
for(z=0;z<n;z++)
scanf("%c",ino[z]);
head=findchild2(post,0,n-1,ino,0,n-1);
printf("前遍历为:");
break;
default:
printf("error\n");
break;
}
t=head;
preorder(t);
cout<<endl;
return 0;
}
展开
 我来答
我是左耳姑娘吖
推荐于2016-11-23 · TA获得超过722个赞
知道小有建树答主
回答量:528
采纳率:100%
帮助的人:289万
展开全部
那个 先跟你说一声 scanf("%d",&a);注意要加&这个符号的 代码 我还在看 (*^__^*) 嘻嘻…… 不知道你是不是已经改好了?

#include<iostream>
using namespace std;
#define n 4
typedef struct node{
char data;
struct node * left;
struct node * right;
}Node;
char pre[n],ino[n],post[n];
Node *findchild1(char *a,int i1,int j1,char *b,int i2,int j2)
{
if(i1>j1||i2>j2)
return NULL;
Node *p=new Node;
int i;
p->data=a[i1];
cout<<p->data<<" ";
for(i=i2;i<=j2;i++)
{if(b[i]==a[i1])break;}
cout<<i<<endl;
p->left=findchild1(a,i1+1,i1+i-i2,b,i2,i-1);
p->right=findchild1(a,i1+i-i2+1,j1,b,i+1,j2);
return p;
}
Node *findchild2(char *a,int i1,int j1,char *b,int i2,int j2)
{
if(i1>j1||i2>j2)
return NULL;
Node *p=new Node;
int i; p->data=a[j1];
for(i=i2;i<=j2;i++)
{ if(b[i]==a[j1])break; }
p->left=findchild2(a,i1,i1+i-i2-1,b,i2,i-1);
p->right=findchild2(a,i1+i-i2,j1-1,b,i+1,j2);
return p;
}
void preorder(Node *t)
{
if(t!=NULL)
{
cout<<t->data<<" ";
preorder(t->left);
preorder(t->right);
}
}
int main()
{
Node *head,*t;
int y,z;
printf("0:已知前序和中序求后序遍历:\n");
printf("1:已知中序和后序求前序遍历:\n");
printf("请输入y:\n");
scanf("%d",&y);
if(y==0)
{
for(z=0;z<n;z++)
scanf("%c",&pre[z]);
for(z=0;z<n;z++)
scanf("%c",&ino[z]);
head=findchild1(pre,0,n-1,ino,0,n-1);
printf("后序遍历为:");
}
else if(y==1)
{
for(z=0;z<n;z++)
scanf("%c", post[z]);
for(z=0;z<n;z++)
scanf("%c",ino[z]);
head=findchild2(post,0,n-1,ino,0,n-1);
printf("前遍历为:");
}
else
printf("error\n");
t=head;
preorder(t);
cout<<endl;
system("pause");
return 0;
}

这个 我在完成了让你的0和1能继续进行 但是你的代码还有问题 运行结果是错的 我还没有改
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式