101.对称二叉树
题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例2:
输入:root = [1,2,2,null,3,null,3]
输出:false
解题思路
//递归法
class Solution {
public:
bool check(TreeNode *left, TreeNode *right) {
if(!left&&!right)return true; //如果左子树和右子树非空,返回true
if (!left || !right) return false; //如果只有一个是空,返回false
if(left->val!=right->val)return false;//如果左子树的值不等于右子树的值,返回false'
return check(left->left, right->right) && check(left->right, right->left);//递归检查左子树的对称性和右子树的对称性
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};
//迭代:用队列模拟递归
class Solution {
public:
bool check(TreeNode *u, TreeNode *v) {
queue <TreeNode*> q;
q.push(u); q.push(v);
while (!q.empty()) {
u = q.front(); q.pop();
v = q.front(); q.pop();
if (!u && !v) continue;
if ((!u || !v) || (u->val != v->val)) return false;
q.push(u->left);
q.push(v->right);
q.push(u->right);
q.push(v->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};