题目描述
判断两序列是否为同一二叉搜索树序列
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出
如果序列相同则输出YES,否则输出NO
样例输入 Copy
6
45021
12045
54120
45021
45012
21054
50412
0
样例输出 Copy
NO
NO
YES
NO
NO
NO
#include
#include
using namespace std;
int flag;
struct node
{
int data;
struct node *l;
struct node *r;
};
struct node *creat(int n, struct node *root)
{
if(root==NULL)
{
root=(struct node*)malloc(sizeof(struct node));
root->data=n;
root->l=NULL;
root->r=NULL;
}
else
{
if(n<root->data)
root->l=creat(n,root->l);
else root->r=creat(n,root->r);
}
return root;
};
void compare(struct node *root1,struct node *root2)
{
if(root1!=NULL&&root2!=NULL)
{
if(root1->data!=root2->data)
{
flag=0;
return;
}
else
{
compare(root1->l,root2->l);
compare(root1->r,root2->r);
}
}
else if((root1==NULL&&root2!=NULL)||(root1!=NULL&&root2==NULL))
{
flag=0;
return;
}
}
int main()
{
int n,i,j,l;
struct node *root1,*root2;
while(scanf("%d",&n)!=EOF&&n)
{
char a[11],b[11];
scanf("%s",a);
root1=NULL;
l=strlen(a);
for(i=0; i<l; i++)
{
root1=creat(a[i]-'0',root1);
}
for(i=0; i<n; i++)
{
root2=NULL;
flag=1;
scanf("%s",b);
l=strlen(b);
for(j=0; j<l; j++)
{
root2=creat(b[j]-'0',root2);
}
compare(root1,root2);
if(flag==1)printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
一开始这样写的怎么也没找出来错误,后来发现,一个小地方忽略了。。。
#include
#include
using namespace std;
int flag;
struct node
{
char data;
struct node *l;
struct node *r;
};
struct node *creat(int n, struct node *root)
{
if(root==NULL)
{
root=(struct node*)malloc(sizeof(struct node));
root->data=n+'0';//这里转化为char类型
root->l=NULL;
root->r=NULL;
}
else
{
if(n+'0'<root->data)//这里也需要转化!!!
root->l=creat(n,root->l);
else root->r=creat(n,root->r);
}
return root;
};
void compare(struct node *root1,struct node *root2)
{
if(root1!=NULL&&root2!=NULL)
{
if(root1->data!=root2->data)
{
flag=0;
return;
}
else
{
compare(root1->l,root2->l);
compare(root1->r,root2->r);
}
}
else if((root1==NULL&&root2!=NULL)||(root1!=NULL&&root2==NULL))
{
flag=0;
return;
}
}
int main()
{
int n,i,j,l;
struct node *root1,*root2;
while(scanf("%d",&n)!=EOF&&n)
{
char a[11],b[11];
scanf("%s",a);
root1=NULL;
l=strlen(a);
for(i=0; i<l; i++)
{
root1=creat(a[i]-'0',root1);
}
for(i=0; i<n; i++)
{
root2=NULL;
flag=1;
scanf("%s",b);
l=strlen(b);
for(j=0; j<l; j++)
{
root2=creat(b[j]-'0',root2);
}
compare(root1,root2);
if(flag==1)printf("YES\n");
else printf("NO\n");
}
}
return 0;
}