根据序列建树
先序遍历再比较是否一样
比较简单
#include<bits/stdc++.h>
using namespace std;
struct node
{
/* data */char num;
struct node *left;
struct node *right;
};
string s1,s2;
void ad(node * &p,char x)
{
if(!p)
{
p=new node;
p->left=p->right=NULL;p->num=x;
return ;
}
else
{
if(x>p->num)ad(p->right,x);
else ad(p->left,x);
}
}
void pr(node *p)
{
if(p)
{
s1+=p->num;
pr(p->left);pr(p->right);
}
}
void prr(node *p)
{
if(p)
{
s2+=p->num;
prr(p->left);prr(p->right);
}
}
int main()
{
//freopen("C:\\Users\\Lenovo\\Desktop\\input.txt","r",stdin);
int n;
char s[500],h[500];
node *p=NULL;
while (~scanf("%d",&n)&&n)
{
getchar();
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
{
ad(p,s[i]);
}
pr(p);
//cout<<s1<<endl;
for(int i=0;i<n;i++)
{
node *temp=NULL;
getchar();
scanf("%s",h);
if(strlen(h)!=strlen(s))printf("NO\n");
else
{
s2.clear();
for(int j=0;j<strlen(h);j++)
{
ad(temp,h[j]);
}
prr(temp);
//cout<<s2<<endl;
if(s1==s2)printf("YES");
else printf("NO");
printf("\n");
}
free(temp);
}
s1.clear();
p=NULL;
}
return 0;
}