Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
思路: 递归,对称扫描。设定flag提前返回
class Solution {
private:
bool flag = true;
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
dfs(root->left, root->right);
return flag;
}
void dfs(TreeNode* l, TreeNode* r){
if (!flag || (!l&&!r))
return;
if ((!l&&r) || (l&&!r) || (l->val != r->val)){
flag = false;
return;
}
dfs(l->left, r->right);
dfs(l->right, r->left);
}
};