数据结构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 }