leetcode101.对称二叉树树(递归练习题)

文章目录

  • 一、 题目描述
  • 二、 核心思路:判断左右子树是否互为镜像
  • 三、 递归的终止条件 (Base Cases)
  • 四、 代码实现与深度解析
  • 五、 关键点与复杂度分析
  • 六、 总结与对比 (LC100 vs LC101)

LeetCode 101. 对称二叉树 - 力扣【难度:简单;通过率:62.6%】,这道题与前一题:LeetCode100 基本相似,都是递归的思路,解法可以对照参考上一篇博文: leetcode100.相同的树(递归练习题)

一、 题目描述

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

示例:

示例 1:

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

示例 1

示例 2:

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

示例 2


二、 核心思路:判断左右子树是否互为镜像

一棵树是否对称,其本质在于:它的左子树和右子树是否互为镜像

因此,我们可以将问题分解为:

  1. 从根节点开始,判断其左子树和右子树是否互为镜像
  2. 递归地,对于任意一对需要判断是否互为镜像的节点 leftright
    • left 的左孩子,应该与 right 的右孩子互为镜像
    • left 的右孩子,应该与 right 的左孩子互为镜像

三、 递归的终止条件 (Base Cases)

在递归函数中,正确处理基准情况是关键。对于判断两个节点是否互为镜像,有以下几种情况:

  • 情况一:两个节点都为空
    • 如果 leftright 都为 null,它们是镜像的。返回 true
  • 情况二:只有一个节点为空
    • 如果 leftnullright 不为 null,或者 left 不为 nullrightnull,它们不可能是镜像的。返回 false
  • 情况三:两个节点都不为空,但值不同
    • 如果 leftright 都不为 null,但 left.val != right.val,它们的值不同,因此不互为镜像。返回 false

四、 代码实现与深度解析

【一种参考代码】:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {// 主入口函数:判断整棵树是否对称,即判断其左子树和右子树是否互为镜像public boolean isSymmetric(TreeNode root) {// 如果根节点为空,根据定义,空树也是对称的if (root == null) {return true;}// 调用辅助函数,判断根节点的左右孩子是否互为镜像return isMirror(root.left, root.right);}/*** 辅助递归函数:判断两棵子树(以 left 和 right 为根)是否互为镜像* @param left  第一棵子树的根节点* @param right 第二棵子树的根节点* @return 如果两棵子树互为镜像,则返回 true;否则返回 false*/public boolean isMirror(TreeNode left, TreeNode right) {// 1. 基准情况一:两个节点都为空,它们互为镜像if (left == null && right == null) {return true;}// 2. 基准情况二:只有一个节点为空(由于是 else if,排除了都为空的情况)// 此时,一个为空,一个不为空,肯定不互为镜像else if (left == null || right == null) {return false;}// 3. 基准情况三:两个节点都不为空,但值不相等,不互为镜像else if (left.val != right.val) {return false;}// 4. 递归调用:// 如果以上基准情况都未命中(即 left 和 right 都不为空且值相等),// 则继续递归判断它们的子节点是否互为镜像// 关键点:left 的左孩子要与 right 的右孩子比较 (isMirror(left.left, right.right))//         left 的右孩子要与 right 的左孩子比较 (isMirror(left.right, right.left))// 只有这两对都互为镜像,当前这对节点才算互为镜像return isMirror(left.left, right.right) && isMirror(left.right, right.left);}
}

五、 关键点与复杂度分析

  • 函数职责分离isSymmetric 负责初始调用,isMirror 负责具体的递归判断。这种分离使得代码逻辑更清晰
  • 对称性体现:递归调用 isMirror(left.left, right.right)isMirror(left.right, right.left) 是本题的核心,它完美地体现了镜像对称的定义
  • Base Case 的全面性:对三种基准情况的清晰划分,确保了递归的正确终止和各种边界条件的覆盖
  • 时间复杂度O(N) 其中 N 是二叉树的节点数。每个节点最多被访问一次(通过 isMirror 函数中的 leftright 参数),进行常数次比较操作
  • 空间复杂度O(H) 其中 H 是二叉树的高度。这主要是递归调用栈的空间开销。最坏情况下(树退化为链表),H 可以达到 N,所以空间复杂度为 O(N)

六、 总结与对比 (LC100 vs LC101)

特性LeetCode 100 (相同的树)LeetCode 101 (对称二叉树)
问题定义判断两棵独立的树 pq 是否结构和值都相同判断一棵树 root 是否自身镜像对称
递归入口isSameNode(p, q)isMirror(root.left, root.right)
递归调用isSameNode(p.left, q.left)isSameNode(p.right, q.right)isMirror(left.left, right.right)isMirror(left.right, right.left)
核心差异同向比较:左对左,右对右交叉比较:左的左对右的右,左的右对右的左

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916125.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【国内电子数据取证厂商龙信科技】谁是躲在“向日葵”后的

一、前言大家可能每天都在使用在远控软件,我们在享受远控软件带来的便利同时,犯罪者也在使用远控软件进行违法犯罪活动,以达到隐藏自己的目的。市面上常用的远控软件有“向日葵”、“TeamViewer”。二、案件背景在一次电信诈骗案件支援中&…

SAP-PP-MRPLIST

MRP(物料需求计划)分析功能,主要包含以下要点: 程序通过选择工厂和物料/销售订单范围作为输入条件,支持两种展示方式:ALV表格和树形结构 核心功能包括: 物料主数据查询(MAKT/MARA表) 销售订单数据查询(VBAP表) BOM展开(CS_BOM_EXPL_MAT_V2函数) MRP数据获取(MA…

MIT线性代数01_方程组的几何解释

Linear Algebra Lecture #1 W. Gilbert Strangn linear equations, n unknowns row picturecol pictureMatrix form {2x−y0−x2y3 \left\{\begin{matrix} 2x - y 0 \\ -x 2y 3 \end{matrix}\right. {2x−y0−x2y3​ 1 Row Picture2 Column PictureWhat are all combination…

FreeRTOS-中断管理

学习内容中断概念中断是计算机系统中一种重要的事件驱动机制,用于在特定条件下打断正在执行的程序,并跳转到预定义的中断处理程序中执行特定的操作。当发生中断时,处理器会立即中止当前正在执行的指令,保存当前的执行状态&#xf…

图像梯度处理与边缘检测

在图像处理的世界里,我们常常需要从复杂的像素矩阵中提取有意义的信息 —— 比如一张照片中物体的轮廓、医学影像中病灶的边界、自动驾驶视野里的道路边缘。这些 “边界” 或 “轮廓” 在专业术语中被称为 “边缘”,而捕捉边缘的核心技术,离不…

GPU服务器与PC 集群(PC农场):科技算力双子星

在数字经济高速发展的今天,算力已成为驱动科技创新与产业变革的核心引擎。GPU服务器凭借其强大的并行计算能力,在图形渲染、人工智能训练等领域展现出不可替代的优势;而PC集群则通过分布式架构,以高性价比和灵活扩展特性&#xff…

秋招Day19 - 分布式 - 分布式锁

单体时代,可以直接用本地锁来实现对竞争资源的加锁,分布式环境下就要用到分布式锁了有哪些分布式锁的实现方案?MySQL分布式锁、Zookeeper分布式锁、Redis分布式锁MySQL分布式锁如何实现?创建一张锁表,对字段定义唯一性…

AIStarter平台亮点解析:从ComfyUI项目上架到一键运行的完整指南

大家好!今天分享一个AIStarter平台的深度体验,带你了解如何通过这个平台轻松上架和运行AI项目!视频中,博主在凌晨分享了AIStarter的强大功能,重点展示了ComfyUI 4.0和5.0整合包的上架过程,以及如何简化AI项…

电脑录屏软件推荐:如何使用oCam录制游戏、教程视频

在工作、学习或游戏过程中,我们经常需要录制电脑屏幕,比如制作教程视频、记录游戏操作、分享软件使用过程等。oCam 是一款功能强大且操作简单的屏幕录制工具,支持 Windows 系统,深受用户喜爱。今天简鹿办公就来手把手教你如何使用…

安装cuml报错

安装命令 (注意cuda的版本) pip install --no-cache-dir --extra-index-urlhttps://pypi.nvidia.com cuml-cu11 报错: 找了很多网上的教程 1.版本问题 没解决 pip install --upgrade pip pip install --upgrade setuptools 2.参考下面博…

【ECharts✨】解决Vue 中 v-show 导致组件 ECharts 样式异常问题

解决Vue 中 v-show 导致组件 ECharts 样式异常问题 问题概述 在使用 Vue 的 v-show 指令实现 <PageOne/>、<PageTwo/>、<PageThree/> 三个视图的定时切换时&#xff0c;<PageTwo/> 显示时出现了异常&#xff0c;具体表现为 ECharts 图表渲染图表尺寸异…

旅游管理虚拟仿真实训室:重构实践教学新生态

在旅游产业数字化转型与教育信息化深度融合的背景下&#xff0c;旅游管理虚拟仿真实训室成为连接理论教学与行业实践的关键纽带。它通过沉浸式技术还原旅游场景&#xff0c;解决传统实训中资源受限、风险较高、时空局限等问题&#xff0c;为旅游管理专业人才培养提供全新路径。…

【在线五子棋对战】十、对战玩家匹配管理模块

文章目录前言Ⅰ. 匹配队列实现Ⅱ. 匹配队列管理类实现完整代码前言 五子棋对战的玩家匹配是根据自己的天梯分数进行匹配的&#xff0c;而服务器中将玩家天梯分数分为三个档次&#xff1a; 青铜&#xff1a;天梯分数小于 2000 分白银&#xff1a;天梯分数介于 2000~3000 分之间…

k8s之ingress定义https访问方式

接上文&#xff1a;https://blog.csdn.net/soso678/article/details/149607069?spm1001.2014.3001.5502定义后端应用与service [rootmaster ingress]# cat my-nginx.yml apiVersion: apps/v1 kind: Deployment metadata:name: my-nginx spec:selector:matchLabels:run: my-n…

《C++ vector 完全指南:vector的模拟实现》

《C vector 完全指南&#xff1a;vector的模拟实现》 文章目录《C vector 完全指南&#xff1a;vector的模拟实现》一、定义vector的成员变量二、用vector实现动态二维数组三、vector的接口实现1.vector的默认成员函数&#xff08;1&#xff09;构造函数实现&#xff08;2&…

腾讯云代码助手使用指南

腾讯云代码助手使用指南什么是腾讯云代码助手功能区展示功能介绍功能演示一、创建新项目1.先用Chat 把口语化的需求转换成AI更容易接受的结构化提示词2.再用Craft 模式进行代码生成3.成果展示二、老项目探索1.使用Codebase 帮理解项目代码三、代码补全1.只需输入标准的函数名&a…

【vue3+vue-pdf-embed】实现PDF+图片预览

【vue3vue-pdf-embed】实现PDF图片预览项目背景项目代码分析代码项目背景 技术栈&#xff1a;vue3Tselementplus 需要实现PDF和图片预览 图片预览很好解决了&#xff0c;可以用elementplus 自带的组件el-image 可实现 PDF预览可以用搜了一圈&#xff0c;有两个方案&#xff0c…

Leetcode力扣解题记录--第21题(合并链表)

题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&…

基于单片机的楼宇门禁系统的设计与实现

2、系统总体设计 2.1硬件的总体设计 为了使门禁系统智能化&#xff0c;需要一个主控芯片对整个门禁系统进行管理控制。接着还需要对应的模块完成包括数字密码验证和IC卡识别验证的功能。当出现非法闯入、验证失败等情况时还需要对操作人员进行警告。最后需要一个人机交互界面方…

全天候自动化数字型智能驱鸟装置,电网防鸟高科技

鸟类在输电线路铁塔、电线杆上筑巢、栖息和排泄是个大问题&#xff0c;很容易引发线路故障导致停电。为了保障电网安全稳定运行&#xff0c;会用到各种智能驱鸟装置来驱赶鸟类&#xff0c;避免涉鸟故障发生。例如全天候自动化数字型智能驱鸟装置&#xff0c;其厉害的地方在于它…