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星)

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

相关推荐
先吃饱再说10 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰13 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术14 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六17 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术18 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize19 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队1 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法