3340=数据结构实验之二叉树一:树的同构
1 #include <stdio.h> 2 #include <stdlib.h> 3 int n,m; 4 struct node 5 { 6 char date; 7 int left,right; 8 } tree1[12],tree2[12]; 9 void creat(struct node tree[],int n) 10 { 11 char b[2]; 12 int i; 13 for(i=0; i<n; i++) 14 { 15 scanf("%s",b); 16 tree[i].date = b[0]; 17 scanf("%s",b); 18 if(b[0]=='-') tree[i].left=11; 19 else tree[i].left = b[0]-'0'; 20 scanf("%s",b); 21 if(b[0]=='-') tree[i].right=11; 22 else tree[i].right = b[0]-'0'; 23 } 24 } 25 int check2(int i,int j) 26 { 27 if(tree1[tree1[i].left].date==tree2[tree2[j].left].date&&tree1[tree1[i].right].date==tree2[tree2[j].right].date) 28 return 1; 29 if(tree1[tree1[i].right].date==tree2[tree2[j].left].date&&tree1[tree1[i].left].date==tree2[tree2[j].right].date) 30 return 1; 31 return 0; 32 } 33 int check(struct node tree1[],struct node tree2[]) 34 { 35 int i,j; 36 for(i=0; i<n; i++) 37 { 38 for(j=0; j<m; j++) 39 { 40 if(tree1[i].date==tree2[j].date) 41 { 42 if(check2(i,j)) break; 43 else return 0; 44 } 45 } 46 if(j==m) return 0; 47 } 48 return 1; 49 } 50 int main() 51 { 52 while(~scanf("%d",&n)) 53 { 54 creat(tree1,n); 55 scanf("%d",&m); 56 creat(tree2,m); 57 if(m!=n) printf("No\n"); 58 else if(check(tree1,tree2)) printf("Yes\n"); 59 else printf("No\n"); 60 } 61 return 0; 62 }