sdut 2482 二叉排序树

题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2482

感觉树这一部分掌握的真心不好,以前练习的一道题,当时不会,今天参考了一下别人的代码,出了点错误,但终于A了。。。。。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdlib>
 5 using namespace std;
 6 
 7 typedef struct node
 8 {
 9     char data;
10     struct node *l,*r;
11 }tree;
12 tree *head,*p2;
13 char s[20],s1[20];
14 int x1,y1;
15 
16 void cre(tree *q,char ch)
17 {
18     if(q->data<ch)
19     {
20         if(q->r==NULL)
21         {
22             p2=new tree;
23             p2->data=ch;
24             p2->l=NULL;
25             p2->r=NULL;
26             q->r=p2;
27         }
28         else
29         cre(q->r,ch);
30     }
31     else
32     {
33         if(q->l==NULL)
34         {
35             p2=new tree;
36             p2->data=ch;
37             p2->l=NULL;
38             p2->r=NULL;
39             q->l=p2;
40         }
41         else
42         cre(q->l,ch);
43     }
44 }
45 void bulid(char *s)
46 {
47     int len=strlen(s);
48     head=new tree;
49     head->data=*s;
50     head->l=NULL;
51     head->r=NULL;
52     s++; len--;
53     while(len--)
54     {
55         cre(head,*s);
56         s++;
57     }
58 }
59 
60 void cal(tree *q,char s[],int count)
61 {
62     if(q)
63     {
64         s[count++]=q->data;
65         cal(q->l,s,count);
66         cal(q->r,s,count);
67     }
68 }
69 int main()
70 {
71     int n;
72     while(cin>>n&&n)
73     {
74         x1=0;
75         cin>>s;
76         bulid(s);
77         memset(s,0,sizeof(s));
78         cal(head,s,x1);
79         while(n--)
80         {
81             y1=0;
82             cin>>s1;
83             bulid(s1);
84             memset(s1,0,sizeof(s1));
85             cal(head,s1,y1);
86             if(strcmp(s,s1)==0)
87             cout<<"YES"<<endl;
88             else
89             cout<<"NO"<<endl;
90         }
91     }
92     return 0;
93 }

 

posted @ 2013-12-09 21:35  水门  阅读(222)  评论(0编辑  收藏  举报