注意: 建立好二叉排序树之后,只需判断两个二叉排序树的前序遍历是否相同即可。
<pre name="code" class="cpp">#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node * lchild;
struct node * rchild;
}node,*Tree;
char a[1001],b[1001],st1[1001],st2[1001];
int i,j;
Tree creat(Tree &t,char x)
{
if(t==NULL)
{
t=new(node);
t->data=x;
t->lchild=NULL;
t->rchild=NULL;
}
else
{
if(x<t->data)
{
t->lchild=creat(t->lchild,x);
}
else
{
t->rchild=creat(t->rchild,x);
}
}
return t;
}
void xian(Tree &t)
{
if(t!=NULL)
{
a[i++]=t->data;
xian(t->lchild);
xian(t->rchild);
}
}
void xiannext(Tree &t)
{
if(t!=NULL)
{
b[j++]=t->data;
xiannext(t->lchild);
xiannext(t->rchild);
}
}
int main()
{
int n;
Tree t1,t2;
while(cin>>n&&(n!=0))
{
cin>>st1;
t1=NULL;
for( i=0;st1[i]!='\0';i++)
{
t1=creat(t1,st1[i]);
}
i=0;
xian(t1);
a[i]='\0';
while(n--)
{
cin>>st2;
t2=NULL;
for( j=0;st2[j]!='\0';j++)
{
t2=creat(t2,st2[j]);
}
j=0;
xiannext(t2);
b[j]='\0';
if(strcmp(a,b))
{
cout<<"NO"<<endl;
}
else
{
cout<<"YES"<<endl;
}
}
}
}