Problem
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
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
Algorithm
整理一下题意:给定一棵树,判断该树是否对称。对称的要求是左子树与右子树结构相同,对应节点值相等。
阅读题目可以发现本题与LeetCode #100 - Same Tree - Easy十分相似。相似之处在于,本题对于左右子树对称的定义与Same Tree中两棵树相同的定义类似。
由于对一棵树的左右子树是否对称很难判断,不妨将左子树与右子树拆开来作判断。判断特殊情况(空树)后,对左右两棵子树进行对比判断。左右子树判断过程采用DFS。代码如下。
//DFS
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
return isSym(root->left,root->right);
}
bool isSym(TreeNode* l,TreeNode* r){
if(l==NULL&&r==NULL) return true;
else if(l==NULL||r==NULL) return false;
if(l->val==r->val) return isSym(l->left,r->right)&&isSym(l->right,r->left);
else return false;
}
};