#include <iostream>
using namespace std;
typedef struct btree{
int data;
struct btree*left,*right;
}btree;
btree* create(btree* t,int x)
{
if(t==NULL)
{
// t=(btree*)malloc(sizeof(btree));
t=new btree;
t->data=x;
t->left=t->right=NULL;
}
else if(x<=t->data)
t->left=create(t->left,x);
else if(x>t->data)
t->right=create(t->right,x);
return t;
}
bool isSame(btree* a,btree* b)
{
if(a==NULL&&b==NULL)
return true;
if(a->data==b->data)
return isSame(a->left,b->left)&&isSame(a->right,b->right);
return false;
}
void func()
{
int n;
while(cin>>n)
{
if(n==0)break;
string str;
cin>>str;
btree* first=NULL;
for(int k=0;k<str.size();k++)
first=create(first,str[k]);
for(int i=0;i<n;i++)
{
string temp;
cin>>temp;
btree* second=NULL;
for(int j=0;j<temp.size();j++)
second=create(second,temp[j]);
bool flag=isSame(first,second);
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
}
int main(int argc, char *argv[])
{
//printf("Hello, world\n");
func();
return 0;
}
简单解法:分别创建二叉线索树,递归判断两个树对应结构上的数字是否相等
-
题目描述:
-
判断两序列是否为同一二叉搜索树序列
-
输入:
-
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
-
输出:
-
如果序列相同则输出YES,否则输出NO
-
样例输入:
-
2 567432 543267 576342 0
-
样例输出:
-
YES NO
本文介绍了一种方法来判断两个序列是否能组成同一颗二叉搜索树,通过创建二叉线索树并递归判断其结构的一致性。
451

被折叠的 条评论
为什么被折叠?



