hot 100 101. 对称二叉树

对称二叉树


问题描述

给你一个二叉树的根节点 root , 检查它是否轴对称。


样例输入

cpp 复制代码
root = [1,2,2,3,4,4,3]

样例输出

cpp 复制代码
true

评测用例规模与约定

树中节点数目在范围 1, 1000

-100 <= Node.val <= 100


解析

要判断一棵二叉树是否对称,我们需要比较树的左右子树是否互为镜像。具体来说:

两个根节点具有相同的值

每个树的右子树都与另一个树的左子树镜像对称

我们可以使用递归或迭代的方法来解决这个问题。

递归方法

递归地比较左右子树:

左子树的左孩子与右子树的右孩子比较

左子树的右孩子与右子树的左孩子比较

迭代方法

使用队列或栈来迭代地比较节点:

将根节点的左右子节点入队两次

每次取出两个节点比较

将一个节点的左子节点和另一个节点的右子节点入队

将一个节点的右子节点和另一个节点的左子节点入队


参考程序

cpp 复制代码
//递归
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (!root) return true;
        return isMirror(root->left, root->right);
    }
    
    bool isMirror(TreeNode* left, TreeNode* right) {
        if (!left && !right) return true;
        if (!left || !right) return false;
        return (left->val == right->val) 
            && isMirror(left->left, right->right) 
            && isMirror(left->right, right->left);
    }
};

//迭代
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr)return true;
        queue<TreeNode*>q;
        q.push(root->left);
        q.push(root->right);
        while(!q.empty()){
           TreeNode* l=q.front();q.pop();
           TreeNode* r=q.front();q.pop();
           if(!l&&!r)continue;
           if(!l||!r)return false;
           if(l->val!=r->val)return false;
           q.push(l->left);
           q.push(r->right);
           q.push(l->right);
           q.push(r->left);
        }
        return true;
    }
};

难度等级

⭐️⭐️⭐️(1~10星)

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
37.2℃99516 分钟前
专业的Claude Design解决方案
前端·算法
め.20 分钟前
定点数运算库
算法·unity
yuannl1025 分钟前
图的深度优先遍历DFS
数据结构
dyxal28 分钟前
最长公共子序列(LCS)
python·算法
稚南城才子,乌衣巷风流3 小时前
ST 表(Sparse Table)算法详解:原理、实现与应用
算法
hold?fish:palm3 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Sw1zzle3 小时前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木3 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b4 小时前
算法日常・每日刷题--<归并排序>1
数据结构·算法