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 };