题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
代码
递归
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);}
};
迭代
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;// 左右一个节点不为空,或者都不为空但数值不相同,返回falseif (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;}
};