给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
题解思路
对称就要保证左子树的左值等于右子树的右值。相反也要满足左子树的右值等于右子树的左值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool equalMirror(TreeNode* l, TreeNode* r)
{
if(NULL == l && NULL == r)
return true;
if(NULL == l || NULL == r)
return false;
if(l->val == r->val)
return equalMirror(l->left, r->right) && equalMirror(l->right, r->left);
return false;
}
bool isSymmetric(TreeNode* root) {
return equalMirror(root, root);
}
};
执行用时 : 16 ms, 在Symmetric Tree的C++提交中击败了96.02% 的用户
内存消耗 : 14.8 MB, 在Symmetric Tree的C++提交中击败了81.91% 的用户