Problem Description
判断两序列是否为同一二叉搜索树序列Input开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
Output
如果序列相同则输出YES,否则输出NO
Sample Input
2
567432
543267
576342
0
Sample Output
YES
NO
//
二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
///
参考代码:
#include<iostream>
#include<cstring>
using namespace std;
char a[1251],b[1251];
void f(char *x,char *y)
{
x[1]=y[0];
int i=1,k=1;
for(;y[i];i++)
{
while(x[k]!='#')
{
if(y[i]>x[k])
k=2*k+1;
else
k=2*k;
}
x[k]=y[i];
k=1;
}
x[1250]='\0';
}
int main()
{
int n;
while(cin>>n,n)
{
char t[11];
cin>>t;
memset(a,'#',sizeof(a));
f(a,t);
while(n--)
{
cin>>t;
memset(b,'#',sizeof(b));
f(b,t);
if(!strcmp(a,b))
puts("YES");
else
puts("NO");
}
}
return 0;
}