SDUT 2482 二叉排序树
这个题也是比较简单的,但悲催的我忘了把调试用的代码注释掉,结果错了几遍。。。。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; }