题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
代码
递归
cpp
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right) {
if (left == nullptr && right != nullptr) return false;
else if (left != nullptr && right == nullptr) return false;
else if (left == nullptr && right == nullptr) return true;
else if (left->val != right->val) return false;
bool outside = compare(left->left, right->right);
bool inside = compare(left->right, right->left);
return outside && inside;
; }
bool isSymmetric(TreeNode* root) {
return compare(root->left, root->right);
}
};
迭代
cpp
class Solution {
public:
bool isSymmetric(TreeNode* root) {
queue<TreeNode*> que;
que.push(root->left);
que.push(root->right);
while (!que.empty()) {
TreeNode* l = que.front(); que.pop();
TreeNode* r = que.front(); que.pop();
//左右都为空,则说明是对称的
if (l == nullptr && r == nullptr) continue;
// 左右一个节点不为空,或者都不为空但数值不相同,返回false
if (l == nullptr || r == nullptr || (l->val != r->val)) return false;
//外侧
que.push(l->left); // 加入左节点左孩子
que.push(r->right);// 加入右节点右孩子
//内侧
que.push(l->right);// 加入左节点右孩子
que.push(r->left);// 加入右节点左孩子
}
return true;
}
};