1 class Solution
2 {
3 public:
4 void swapTree(TreeNode *root)
5 {
6 TreeNode *p= root->left;
7 root->left = root->right;
8 root->right=p;
9 }
10 bool isSameTree(TreeNode* p, TreeNode* q)
11 {
12 if(!p&&!q)
13 return true;
14 else if(p&&!q)
15 return false;
16 else if(!p&&q)
17 return false;
18 if(p->val!=q->val)
19 return false;
20 return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
21 }
22 bool nodeequal(TreeNode* p, TreeNode* q)
23 {
24 if(p->left==NULL&&q->left!=NULL
25 ||p->right==NULL&&q->right!=NULL
26 ||p->left!=NULL&&q->left==NULL
27 ||p->right!=NULL&&q->right==NULL)
28 return false;
29 if(p->left&&p->left->val!=q->left->val)
30 return false;
31 if(p->right&&p->right->val!=q->right->val)
32 return false;
33 return true;
34 }
35 bool flipEquiv(TreeNode* root1, TreeNode* root2)
36 {
37 if(root1==NULL&&root2!=NULL||
38 root1!=NULL&&root2==NULL)
39 return false;
40 if(root1==NULL&&root2==NULL)
41 return true;
42 if(root1->left&&root1->right
43 &&!root2->right&&!root2->left)
44 return false;
45 if(!nodeequal(root1,root2))
46 swapTree(root2);
47 flipEquiv(root1->left,root2->left);
48 flipEquiv(root1->right,root2->right);
49 return isSameTree(root1,root2);
50 }
51 };