1 /******************************************************************
 2 题目:    二叉搜索树(hdu 3791)
 3 链接:    http://acm.hdu.edu.cn/showproblem.php?pid=3791
 4 算法:    二叉搜索树
 5 思路:    因为二叉搜索树的中序遍历结果是从小到大排序,所以这些
 6            二叉树的中序遍历结果是相同的,所只要求这些树的先序遍历
 7            结果,因为两个二叉树的中序后序遍历结果相同,那么这两个
 8            树相同。所以对每个树先建树然后在找先序就可以了
 9 *******************************************************************/
10 #include<iostream>
11 #include<cstdio>
12 #include<cstring>
13 #include<cstdlib>
14 using namespace std;
15 
16 typedef struct Tree
17 {
18     Tree *left,*right;
19     int num;
20 }Tree;
21 Tree *tree;
22 int cut;
23 
24 void init(Tree *t)
25 {
26     t->left=NULL;
27     t->right=NULL;
28 }
29 
30 Tree *inser(Tree *t,int x)
31 {
32     if (t==NULL)
33     {
34         t=(Tree *)malloc(sizeof(Tree));
35         init(t);
36         t->num=x;
37         return t;
38     }
39     if (x<t->num)
40     {
41         t->left=inser(t->left,x);
42         return t;
43     }
44     else
45     {
46         t->right=inser(t->right,x);
47         return t;
48     }
49 }
50 
51 void build(char *s)
52 {
53     tree->num=(s[0]-'0');
54     for (int i=1;s[i];i++)
55     {
56         tree=inser(tree,s[i]-'0');
57     }
58 }
59 
60 void Find(Tree *t,int *a)
61 {
62     if (t==NULL) return ;
63     a[cut++]=t->num;
64     Find(t->left,a);
65     Find(t->right,a);
66     delete(t);
67 }
68 
69 int main()
70 {
71       int n,i;
72       int a[20],b[20];
73       while (~scanf("%d",&n)&&n)
74       {
75           char s[20];
76           scanf("%s",s);
77           tree=(Tree *)malloc(sizeof(Tree));
78           init(tree);
79           build(s);
80           cut=0;
81           Find(tree,a);
82           while (n--)
83           {
84               tree=(Tree *)malloc(sizeof(Tree));
85               init(tree);
86               scanf("%s",s);
87               build(s);
88               cut=0;
89               Find(tree,b);
90               for (i=0;i<cut;i++)
91               {
92                   if (a[i]!=b[i]) break;
93               }
94               if (i==cut) printf("YES\n");
95               else printf("NO\n");
96           }
97       }
98 }

 

posted on 2016-08-03 13:43  pb2016  阅读(230)  评论(0编辑  收藏  举报