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;
} 展开
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;
} 展开
展开全部
那个 先跟你说一声 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能继续进行 但是你的代码还有问题 运行结果是错的 我还没有改
#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能继续进行 但是你的代码还有问题 运行结果是错的 我还没有改
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询