这个题也是比较简单的,但悲催的我忘了把调试用的代码注释掉,结果错了几遍。。。。sad
代码操作步骤是这样的:
1、对第1个数字序列进行建树操作,并保存先序遍历的结果。
2、对后来要比较的数字序列进行建树操作,并保存先序遍历结果。
3、比较两个结果是否相同。
以下是代码:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct node
{
char c;
struct node *l,*r;
} tr;
tr *head,*po;
char s[15],s1[15];
int x,y;
void b(tr *q,char s)
{
if(q->c<s)
{
if(q->r==NULL)
{
po=(tr*)malloc(sizeof(tr));
po->c=s;
po->l=NULL;
po->r=NULL;
q->r=po;
}
else
{
b(q->r,s);
}
}
else
{
if(q->l==NULL)
{
po=(tr*)malloc(sizeof(tr));
po->c=s;
po->l=NULL;
po->r=NULL;
q->l=po;
}
else
{
b(q->l,s);
}
}
}
void build(char *s)
{
int p=strlen(s);
head=(tr*)malloc(sizeof(tr));
head->c=*s;
head->l=NULL;
head->r=NULL;
p--;
s++;
while(p--)
{
b(head,*s);
s++;
}
}
void ha(tr *p)
{
if(p==NULL)
{
return ;
}
s[x]=p->c;
x++;
ha(p->l);
ha(p->r);
}
void hb(tr *p)
{
if(p==NULL)
{
return ;
}
s1[y]=p->c;
y++;
hb(p->l);
hb(p->r);
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
scanf("%s",s);
build(s);
x=0;
ha(head);
s[x]='\0';
while(n--)
{
scanf("%s",s1);
build(s1);
y=0;
hb(head);
s[y]='\0';
if(strcmp(s,s1)==0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
return 0;
}