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

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

相关推荐
x_yeyue34 分钟前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao1 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路2 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑2 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光2 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩3 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494733 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ4 小时前
单词拆分----dp
算法
智者知已应修善业5 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机