题目描述:
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
这道题是一道easy级别的题目,但是我却做了很久,一开始想用中序遍历得到一个数组,然后首尾比较来判断二叉树是不是对称的,但是这种方法对有些特殊情况是不适用的,考虑这样一个二叉树:
1 / \ 2 3 / / 3 2
它得到的中序遍历的序列是32123,满足首尾对称,但是这个二叉树不是对称的。因此换用一种递归的判断方法,即如果一个二叉树对称,那么它的左右子树必须互为对称,如果左右子树互为对称,那么左子树的值必须等于右子树的值,左子树的左子树和右子树的右子树必须互为对称,左子树的右子树和右子树的左子树必须互为对称,从而可以得到递推关系。
class Solution {
public:
bool isSymmetric(TreeNode* root)
{
if(root==NULL) return true;
return isSymmetric(root->left,root->right);
}
bool isSymmetric(TreeNode* left, TreeNode* right)
{
if(left==NULL&&right==NULL) return true;
else if(left==NULL||right==NULL) return false;
else if(left->val!=right->val) return false;
else return isSymmetric(left->left,right->right)&&isSymmetric(left->right, right->left);
}
};