链接
我的错误代码:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
if(!root->left&&!root->right)return true;
if(!(root->left&&root->right))return false;
if(root->left->val!=root->right->val)return false;
return isSymmetric(root->left)&&isSymmetric(root->right);
}
};
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return isMirror(root->left,root->right);
}
bool isMirror(TreeNode*left,TreeNode*right){
if(!left&&!right)return true;
if(!left||!right)return false;
return (left->val==right->val)&&
isMirror(left->left,left->right)&&
isMirror(right->left,right->right);
}
};
正确代码:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return isMirror(root->left,root->right);
}
bool isMirror(TreeNode*left,TreeNode*right){
if(!left&&!right)return true;
if(!left||!right)return false;
return (left->val==right->val)&&
isMirror(left->left,right->right)&&
isMirror(right->left,left->right);
}
};
或者:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return dfs(root->left,root->right);
}
bool dfs(TreeNode* p,TreeNode*q){
if(!p&&!q)return true;
if(!p||!q||p->val!=q->val)return false;
return dfs(p->left,q->right)&&dfs(p->right,q->left);
}
};
唯一注意的点:镜像是左孩子的左子树==右孩子的右子树且左孩子的右子树==右孩子的左子树