当前位置: 首页 > news >正文

101. 对称二叉树

101. 对称二叉树

简单

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

示例 1:

输入:root = [1,2,2,3,4,4,3] 输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3] 输出:false

提示:

  • 树中节点数目在范围[1, 1000]
  • -100 <= Node.val <= 100

📝 核心笔记:对称二叉树 (Symmetric Tree)

1. 核心思想 (一句话总结)

“照镜子:左子树的左手,必须等于右子树的右手;左子树的右手,必须等于右子树的左手。”我们要比较的不是一个节点的左右孩子,而是根节点的左子树根节点的右子树这两棵独立的树。

  • 外侧对比 (Outer):左树的左 (p.left) vs 右树的右 (q.right)。
  • 内侧对比 (Inner):左树的右 (p.right) vs 右树的左 (q.left)。
2. 算法流程 (递归三部曲)

我们将根节点的左右子树拆开,分别称为pq

  1. 终止条件 (Base Case)
    • 都为空p == null && q == null-> 对称 (True)。
    • 一个空一个不空:不对称 (False)。
    • (这部分逻辑在您的p == q中完美涵盖了)
  1. 值比较
    • p.val != q.val-> 不对称 (False)。
  1. 递归 (Cross Check)
    • isMirror(p.left, q.right)isMirror(p.right, q.left)
    • 只有两个方向都对称,整体才对称。
🔍 代码回忆清单
// 题目:LC 101. Symmetric Tree class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; // 从根节点开始,拆分成左右两棵树进行比较 return isMirror(root.left, root.right); } // 这是一个改造版的 "isSameTree" // 实际上它检查的是 p 和 q 是否互为镜像 private boolean isMirror(TreeNode p, TreeNode q) { // 1. 终止条件:处理 null 的情况 if (p == null || q == null) { return p == q; // 只有两个都为 null 才返回 true } // 2. 核心递归: // A. 根节点值必须相同 // B. p 的左边 vs q 的右边 (外侧) // C. p 的右边 vs q 的左边 (内侧) return p.val == q.val && isMirror(p.left, q.right) && isMirror(p.right, q.left); } }
⚡ 快速复习 CheckList (易错点 & 迭代法)
  • [ ]不要比较root.leftroot.right
    • 在递归函数内部,不要写if (p.left.val == p.right.val)
    • 每一层只负责比较传入的pq这两个节点,子节点的比较交给下一层递归。
  • [ ]函数命名小建议
    • 虽然逻辑类似isSameTree,但为了避免歧义,建议 helper 函数命名为checkisMirror。因为SameTree通常暗示leftleft,而这里是leftright
  • [ ]迭代法怎么写?(面试常见追问)
    • 使用队列 (Queue)
    • 每次把u.leftv.right成对放入队列,再把u.rightv.left成对放入。
    • 每次取两个出来比对。如果队列空了都没报错,那就是对称的。
🖼️ 数字演练

树结构:

1 / \ 2 2 / \ / \ 3 4 4 3
  1. Start: CompareL(2)vsR(2).
    • Vals match (2==2).
  1. Recurse Outer: CompareL.left(3)vsR.right(3).
    • Match!
  1. Recurse Inner: CompareL.right(4)vsR.left(4).
    • Match!
  1. Result: True.

http://www.jsqmd.com/news/352085/

相关文章:

  • 2025实测:网盘直链下载工具技术解密——非会员提速的底层逻辑与实战验证
  • 电源设计高效解决方案:Buck-Boost电感计算器应用指南
  • 3步掌握FantiaDL:让数字内容收藏效率提升10倍的开源工具
  • 英雄联盟换肤新体验:R3nzSkin内存级技术完全指南
  • 如何搭建企业级客服系统:零成本实现工单管理的开源解决方案
  • 2025实战:前端性能优化全场景实施指南
  • MPC-BE:2024实测Windows平台免费媒体播放解决方案
  • 零基础入门:掌握MetaboAnalystR的5个核心维度
  • 鸣潮玩家必备神器:WaveTools工具箱让你的游戏体验飞升
  • 2025技术突破:用户主权视角下的网盘下载工具进化史
  • 网盘直链工具:3个维度突破下载限制
  • RPFM全流程效率提升指南:从数据管理到团队协作的创新实践
  • 文献管理总出错?这款工具让跨平台协作效率提升300%
  • 恰同学少年 BuilderX 2026 黑客松大赛→参赛完全指南
  • 容器僵尸战争:Tini如何成为Docker生态的隐形守护者
  • 知识星球内容本地化管理指南:从数据采集到信息掌控的完整解决方案
  • 基于免费大模型的智能客服训练实战:从数据准备到生产部署
  • YimMenu完全使用指南:从问题诊断到高级功能的安全实践
  • 网盘限速让你抓狂?这个开源工具让下载速度提升10倍的秘密
  • 基于GitHub与AI搭建智能客服系统的架构设计与实战
  • Promise.all同时发出三个异步请求
  • 3D游戏模型编辑零基础入门:NifSkope模组制作教程与NIF文件处理指南
  • 3分钟上手英雄联盟换肤工具:安全内存换肤全攻略
  • eNSP小型校园网络毕业设计:新手入门实战与避坑指南
  • JDBC实战:从零构建学生管理系统数据库层
  • 3步解锁iPhone照片:让Windows瞬间支持HEIC预览
  • 零基础掌握文本语义图谱构建:非编程工具实现文本数据深度解码
  • RPFM全流程开发效率提升指南:开源工具技术实践与二次开发详解
  • 颠覆式高效窗口管理:Topit让Mac多任务处理效率提升**300%**
  • 如何在PowerPoint中高效使用LaTeX公式:从入门到精通指南