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
");
58         else if(check(tree1,tree2)) printf("Yes
");
59         else printf("No
");
60     }
61     return 0;
62 }
原文地址:https://www.cnblogs.com/Angfe/p/11838629.html