嗯。。比对两棵树是不是一样的……这……………………
#include <stdio.h>
#define maxn 30
struct node
{
int val;
node *l,*r;
}cmp[maxn],tree[maxn];
void insert(node *rt,node *x)
{
node *p=rt,*pre;
while(p!=NULL)
{
pre=p;
if(x->val<pre->val) p=pre->l;
else p=pre->r;
}
if(x->val<pre->val) pre->l=x;
else pre->r=x;
}
int query(node *init,node *comp,node *x)
{
node *p=comp,*pre;
node *pp=init,*pree;
while(p!=NULL)
{
pre=p;pree=pp;
if(x->val<pre->val) p=pre->l,pp=pree->l;
else p=pre->r,pp=pree->r;
}
if(x->val<pre->val) pre->l=x;
else pre->r=x;
if(x->val!=pp->val) return 1;
else return 0;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char s[maxn];
int i;
scanf("%s",s);
node init;
init.val=0,init.l=init.r=NULL;
for(i=0;s[i]!='\0';i++)
{
int tmp=s[i]-'0';
cmp[i].val=tmp;cmp[i].l=cmp[i].r=NULL;
insert(&init,&cmp[i]);
}
while(n--)
{
int flag=0;
scanf("%s",s);
node comp;
comp.val=0,comp.l=comp.r=NULL;
for(i=0;s[i]!='\0';i++)
{
int tmp=s[i]-'0';
tree[i].val=tmp,tree[i].l=tree[i].r=NULL;
if(query(&init,&comp,&tree[i])) {flag=1;break;}
}
if(flag) printf("NO\n");
else printf("YES\n");
}
}
return 0;
}