#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s1[25],s2[25];
int a[2010],b[2010];
void Btree(char s[],int c[]) //二叉排序树:或者是空树或者是:如果左子树不空,则左子树上的结点值均小于它的根结点的值;若它的右子树不空,则右子树上所有根结点的值均大于它的根结点的值,它的左右子树也的分别为二叉排序树
{
for(int i=0;i<strlen(s);i++)
{
int k=s[i]-'0';
for(int j=1;j<=2000;)
{
if(c[j]==-1)//第一次
{
c[j]=k;
break;
}
else if(c[j]>k)
j*=2;
else
j=j*2+1;
}
}
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
scanf("%s",s1);
memset(a,-1,sizeof(a));
Btree(s1,a);
for(int i=0;i<n;i++)
{
int j;
scanf("%s",s2);
memset(b,-1,sizeof(b));
Btree(s2,b);
for(j=1;j<2000;j++)
if(a[j]!=b[j])
break;
if(j==2000)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
判断两个序列能否组成同一个二叉排序树
猜你喜欢
转载自blog.csdn.net/weixin_42371928/article/details/87945150
今日推荐
周排行