给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
递归
class Solution {
public:
bool compare(TreeNode* left,TreeNode* right){
//两节点均为空,返回true
if(left == nullptr && right == nullptr){
return true;
}
//两节点一个为空,一个不为空的情况,返回false
else if(left == nullptr && right != nullptr){
return false;
}
else if(left != nullptr && right == nullptr){
return false;
}
//两节点均不为空,但是两节点的值不相等,返回false
else if(left->val != right->val){
return false;
}
//两节点均不为空,且两节点的值也相等,递归前进
//先判断二叉树外侧out是否相等
bool out = compare(left->left,right->right);
//再判断二叉树里侧in是否相等
bool in = compare(left->right,right->left);
//不能返回return out == in;因为当out与in均为false的时候,out == in表达式的结果为true
return out == true && in ==true;
}
bool isSymmetric(TreeNode* root) {
if(root == nullptr){
return true;
}
return compare(root->left,root->right);
}
};