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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值