给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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 isSymmetric(TreeNode* root) {
if(root == NULL)
return true;
Change(root ->right);
return IsSame(root ->left, root ->right);
}
void Change(TreeNode* root)
{
if(root == NULL)
return;
TreeNode* temp = root ->left;
root ->left = root ->right;
root ->right = temp;
Change(root ->left);
Change(root ->right);
}
bool IsSame(TreeNode* root1, TreeNode* root2)
{
if(root1 == NULL && root2 == NULL)
return true;
else if(root1 == NULL && root2 != NULL || root1 != NULL && root2 == NULL)
return false;
else if(root1 ->val == root2 ->val)
return IsSame(root1 ->left, root2 ->left) && IsSame(root1 ->right, root2 ->right);
return false;
}
};