给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
思路:一棵树如果是镜像的,那么它的左右子树就得是镜像的。两棵树是镜像的条件:根节点值相等,且其中一棵树的左子树和另一棵树的右子树必须得是镜像的,采用递归的方法。
class Solution {
public:
bool help(TreeNode* p, TreeNode* q){
if(!p || !q) return p==q;
return (p->val == q->val && help(p->left, q->right)
&& help(p->right, q->left));
}
bool isSymmetric(TreeNode* root) {
return !root || help(root->left, root->right);
}
};