链接
我的错误代码:
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);}
};
唯一注意的点:镜像是左孩子的左子树==右孩子的右子树且左孩子的右子树==右孩子的左子树