Leetcode-951 Flip Equivalent Binary Trees(翻转等价二叉树)

 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 };
原文地址:https://www.cnblogs.com/Asurudo/p/10052883.html