chenxi16

导航

数据结构1 - 04-树4 是否同一棵二叉搜索树

测试根据不同的输入顺序是否为同一棵二叉搜索树。其中树的结点数小于等于10,而且树的数字为1-n。

 

 

 1 #include<stdio.h>
 2 #define MAXN 11
 3 struct node{
 4     int left,right;
 5 };
 6 struct node A[MAXN],B[MAXN];
 7 int a[MAXN],b[MAXN],n,l,flag;
 8 void creatBST(int a[],struct node A[]);
 9 void read();
10 void judge(int ra,int rb); 
11 int main(){
12     scanf("%d",&n);
13     int i;
14     while(n!=0){
15         scanf("%d",&l);
16     for(i=0;i<n;i++) scanf("%d",&a[i]);
17     creatBST(a,A);
18     for(i=0;i<l;i++){
19         read();
20         flag = 0;
21         if(A[0].left!=B[0].left) flag=1;
22         else  judge(A[0].left,B[0].left);
23         if(flag==1) printf("No\n");
24         else printf("Yes\n");
25     }
26     scanf("%d",&n);
27     }
28     
29     return 0;
30 } 
31 
32 void creatBST(int a[],struct node A[]){
33     int value,pre,now,r;
34     for(int i=0;i<=n;i++){
35         A[i].left = -1;
36         A[i].right = -1;
37     }
38     A[0].left= a[0];
39     for(int i=1;i<n;i++){
40         value = a[i];
41         r = A[0].left;
42         while(r!=-1){
43             pre = r;
44             if(r<value){
45                 r = A[r].right;
46             }
47             else if(r>value){
48                 r = A[r].left;
49             }
50             else break;
51         }
52         if(pre<value) A[pre].right = value;
53         else if(pre>value) A[pre].left = value;
54     
55     }
56 }
57 void read(){
58     int i;
59     for(i=0;i<n;i++) scanf("%d",&b[i]);
60     creatBST(b,B);
61 }
62 void judge(int ra,int rb){
63     if(ra!=rb) {
64         flag=1;
65         return;
66     }
67     else {
68         if (ra==-1&&rb==-1) return;
69     else{
70         judge(A[ra].left,B[rb].left);
71         judge(A[ra].right,B[rb].right);
72         }    
73     }
74     
75 }

 

posted on 2020-04-03 18:00  chenxi16  阅读(192)  评论(0编辑  收藏  举报