解题思路:返回值为bool,即是判断某个条件是否满足的题目。其中左子树和右子树对称的条件:
· 两个节点值相等,或者都为空
· 左节点的左子树和右节点的右子树对称
· 左节点的右子树和右节点的左子树对称
则不满足以上条件的情况应返回false.
解法一:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root) return true;
queue<TreeNode *> qt1,qt2;
qt1.push(root->left);
qt2.push(root->right);
while(!qt1.empty() && !qt2.empty()){
TreeNode *left = qt1.front();
qt1.pop();
TreeNode *right = qt2.front();
qt2.pop();
if(!left && !right)
continue;
if(!left || !right)
return false;
if(left->val != right->val)
return false;
qt1.push(left->left);
qt2.push(right->right);
qt1.push(left->right);
qt2.push(right->left);
}
return true;
}
};
解法二:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return issym(root->left,root->right);
}
bool issym(TreeNode *left,TreeNode *right){
if(!left && !right) return true;
if(!left || !right) return false;
if(left->val != right->val) return false;
return issym(left->left,right->right) && issym(left->right,right->left);
}
};
注:
要比较的两边有三种对称情况:
1.两边皆为空
2.两边皆有一个节点
3.两边皆有两个节点