-
题目描述:
-
判断两序列是否为同一二叉搜索树序列
-
输入:
-
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
-
输出:
-
如果序列相同则输出YES,否则输出NO
-
样例输入:
-
2 567432 543267 576342 0
-
样例输出:
-
YES NO
思路很简单,重建树判断是否一致
#include<iostream>
#include<string>
using namespace std;
typedef struct node
{
node *left;
node *right;
char c;
}*tree;
void creat(tree *p,string &s)
{
int n=s.length();
for(int i=0;i<n;++i)
{
tree temp=*p;
tree pre=NULL;
tree te=new node();
te->c=s[i];
te->left=NULL;
te->right=NULL;
while(temp)
{
pre=temp;
if(temp->c>s[i])
temp=temp->left;
else
temp=temp->right;
}
if(pre==NULL)
*p=te;
else if(pre->c>s[i])
pre->left=te;
else
pre->right=te;
}
}
void pre(tree p,string &s)
{
if(p)
{
s+=p->c;
pre(p->left,s);
pre(p->right,s);
}
}
int main()
{
tree t=NULL;
string s1,s2;
int n;
while(cin>>n,n)
{
cin>>s1;
t=NULL;
creat(&t,s1);
s1="";
pre(t,s1);
while(n--)
{
cin>>s2;
t=NULL;
creat(&t,s2);
s2="";
pre(t,s2);
if(s1==s2)
cout<<"YES\n";
else
cout<<"NO\n";
//s2.clear();
}
//s1.clear();
}
}