判断两二叉树是否完全相同

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <stdbool.h> 
 4 
 5 typedef int ElementType;
 6 
 7 struct BinarySearchTreeNode
 8 {
 9     ElementType Element;
10     struct BinarySearchTreeNode *Left;
11     struct BinarySearchTreeNode *Right;
12 };
13 
14 bool TwoBSTreeIsSame(struct BinarySearchTreeNode *TreeRoot_1,struct BinarySearchTreeNode *TreeRoot_2)
15 {
16     if(!TreeRoot_1 && !TreeRoot_2)
17         return true;
18     if( (TreeRoot_1 && !TreeRoot_2) || (!TreeRoot_1 && TreeRoot_2) || 
19          TreeRoot_1->Element != TreeRoot_2->Element)
20         return false;
21     return TwoBSTreeIsSame(TreeRoot_1->Left,TreeRoot_2->Left) && TwoBSTreeIsSame(TreeRoot_1->Right,TreeRoot_2->Right);
22 }
23 
24 int main()
25 {
26     struct BinarySearchTreeNode Tree_1[3];
27     struct BinarySearchTreeNode Tree_2[3];
28     struct BinarySearchTreeNode Tree_3[3];
29     
30     Tree_1[0].Element = 1;
31     Tree_1[1].Element = 2;
32     Tree_1[2].Element = 3;
33     Tree_1[0].Left = &Tree_1[1];
34     Tree_1[0].Right = NULL;
35     Tree_1[1].Left = NULL;
36     Tree_1[1].Right = &Tree_1[2];
37     Tree_1[2].Left = NULL;
38     Tree_1[2].Right = NULL;
39     
40     Tree_2[0].Element = 1;
41     Tree_2[1].Element = 3;
42     Tree_2[2].Element = 2;
43     Tree_2[0].Left = &Tree_2[1];
44     Tree_2[0].Right = NULL;
45     Tree_2[1].Left = &Tree_2[2];
46     Tree_2[1].Right = NULL;
47     Tree_2[2].Left = NULL;
48     Tree_2[2].Right = NULL;
49     
50     Tree_3[0].Element = 1;
51     Tree_3[1].Element = 2;
52     Tree_3[2].Element = 3;
53     Tree_3[0].Left = &Tree_3[1];
54     Tree_3[0].Right = NULL;
55     Tree_3[1].Left = NULL;
56     Tree_3[1].Right = &Tree_3[2];
57     Tree_3[2].Left = NULL;
58     Tree_3[2].Right = NULL;
59     
60     printf("Tree_1 compare with Tree_2: %d\n",TwoBSTreeIsSame(&Tree_1[0],&Tree_2[0]));
61     printf("Tree_1 compare with Tree_3: %d\n",TwoBSTreeIsSame(&Tree_1[0],&Tree_3[0]));
62     printf("Tree_3 compare with Tree_2: %d\n",TwoBSTreeIsSame(&Tree_3[0],&Tree_2[0]));
63     printf("Tree_3 compare with Tree_3: %d\n",TwoBSTreeIsSame(&Tree_3[0],&Tree_3[0]));
64     return 0;
65 }
66 /*
67 
68     Tree_1:   1        Tree_2:  1      Tree_3 is as same as Tree_1.
69             ↙                 ↙
70             2                 3
71             ↘             ↙
72               3            2
73 */

猜你喜欢

转载自www.cnblogs.com/Asurudo/p/9474110.html