题目简述
给定一个二叉树,检查它是否是镜像对称的。
示例 1:
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
示例 2:
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
题目分析
很多人看到题知道要递归,思路也有,但是就是写不出递归来,始终不清楚到底应该怎么递归。拿这道题来说,判断是否为镜像无非就一个方法,左子树的左孩子和右子树的右孩子相等,左子树的右孩子和右子树的左孩子相等,想清楚这一点递归就很好写了。代码如下:
class Solution {
public:
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p || !q) return false;
return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};