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

【LeetCode刷题日记】一篇带你搞懂平衡二叉树高效判断法(110.平衡二叉树)

个人主页北极的代码欢迎来访作者简介java后端学习者❄️个人专栏苍穹外卖日记SSM框架深入JavaWeb✨命运的结局尽可永在不屈的挑战却不可须臾或缺前言大家好我是代码不加冰今天参加了学校的运动会然后晚上还参加了一个三个小时的急救知识培训所以今天的文章发的有点迟了我们今天继续刷二叉树相关的题。ps关于急救的知识大家还是要了解的生命第一要少熬夜希望大家都健健康康【摘要】本文介绍了判断平衡二叉树的两种方法。平衡二叉树的定义要求每个节点的左右子树高度差不超过1且左右子树也必须是平衡的。第一种自顶向下方法通过递归计算高度并判断平衡性但存在重复计算问题时间复杂度为O(n²)。推荐采用自底向上的后序遍历方法在计算高度的同时判断平衡性利用-1标记不平衡情况时间复杂度优化为O(n)。文章通过示例详细说明了后序遍历的执行过程并提供了完整的Java代码实现。题目背景110.平衡二叉树给定一个二叉树判断它是否是 平衡二叉树示例 1输入root [3,9,20,null,null,15,7]输出true示例 2输入root [1,2,2,3,3,null,null,4,4]输出false示例 3输入root []输出true提示树中的节点数在范围[0, 5000]内-104 Node.val 104题目解析首先我们要知道什么是平衡二叉树 根据题目说的平衡二叉树的定义每个节点的左右两个子树的高度差的绝对值不超过 1并且左右子树也分别是平衡二叉树为什么要左右子树也分别平衡我们看一个例子text1 / \ 2 3 / \ 4 5 / \ 6 7检查根节点1左子树高度 32→4→6右子树高度 33→5→7差值 0 ≤ 1 根节点平衡但是检查左子树节点2左子树高度 24→6右子树高度 0null差值 2 1 左子树不平衡所以整棵树不平衡核心思想平衡二叉树的定义是递归的一棵树是平衡的 ⇔ 左子树平衡 右子树平衡 |左高 - 右高| ≤ 1因此我们需要同时获取两个信息当前树的高度当前树是否平衡方案思路时间复杂度空间复杂度推荐自顶向下暴力先算高度再递归判断O(n²)O(n)❌自底向上推荐后序遍历边计算高度边判断O(n)O(n)✅方案一自顶向下暴力法不推荐java class Solution { public boolean isBalanced(TreeNode root) { if (root null) return true; // 判断当前节点是否平衡 int leftHeight getHeight(root.left); int rightHeight getHeight(root.right); if (Math.abs(leftHeight - rightHeight) 1) { return false; } // 递归判断左右子树 return isBalanced(root.left) isBalanced(root.right); } // 计算树的高度 private int getHeight(TreeNode root) { if (root null) return 0; return 1 Math.max(getHeight(root.left), getHeight(root.right)); } }问题getHeight()会被重复调用每个节点被访问多次时间复杂度 O(n²)。二、方案二自底向上推荐 核心思想后序遍历左右根先递归计算左子树的高度和平衡性再递归计算右子树的高度和平衡性如果左右子树都平衡且高度差 ≤ 1则当前树平衡返回当前树的高度给上一层使用巧妙之处用特殊值如 -1表示不平衡正常情况返回高度代码实现java /** * 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 isBalanced(TreeNode root) { return getHeight(root) ! -1; } // 返回树的高度如果不平衡则返回 -1 private int getHeight(TreeNode root) { if (root null) { return 0; } // 递归计算左子树高度 int leftHeight getHeight(root.left); if (leftHeight -1) { return -1; // 左子树不平衡直接返回 -1 } // 递归计算右子树高度 int rightHeight getHeight(root.right); if (rightHeight -1) { return -1; // 右子树不平衡直接返回 -1 } // 检查当前节点是否平衡 if (Math.abs(leftHeight - rightHeight) 1) { return -1; // 当前节点不平衡 } // 返回当前树的高度 return 1 Math.max(leftHeight, rightHeight); } }关于return getHeight(root) ! -1的完整展开。java public boolean isBalanced(TreeNode root) { int heightOrFlag getHeight(root); // 得到 -1 或高度 if (heightOrFlag -1) { return false; // 不平衡 } else { return true; // 平衡 } }为什么每次都返回-11 / \ 2 3 / \ 4 5 / 6节点6正常 → 返回 1节点4左高1右高0差值1 → 返回 2节点5正常 → 返回 1节点2左高2右高1差值1 → 返回 3节点3正常 → 返回 1节点1左高3右高1差值2 → 返回-1一旦节点1返回 -1整个递归结束isBalanced收到 -1 →falsereturn 1 Math.max(leftHeight, rightHeight);这行代码返回的是树的高度一个正常值0,1,2,3...然后在外层的isBalanced中javapublic boolean isBalanced(TreeNode root) { return getHeight(root) ! -1; }如果getHeight(root)返回的是正常高度0,1,2...→! -1是true→ 平衡如果getHeight(root)返回的是-1→! -1是false→ 不平衡执行过程图解以平衡树为例text3 / \ 9 20 / \ 15 7后序遍历的顺序是硬性规定text对任意一棵树 1. 后序遍历左子树 2. 后序遍历右子树 3. 访问根节点不是“先左再根再右”也不是“哪边节点少先处理哪边”。具体套到这棵树上树结构3/ \9 20/ \15 7第 1 步从根节点 3 开始规则先去左子树9再去右子树20最后访问 3第 2 步进入左子树 9左空右空访问 9此时输出9第 3 步回到 3进入右子树 20规则对 20 这棵树先去左子树15再去右子树7最后访问 20第 4 步进入 15左右空访问 15此时输出9、15第 5 步回到 20进入右子树 7左右空访问 7此时输出9、15、7第 6 步回到 20左15已处理右7已处理访问 20此时输出9、15、7、20第 7 步回到 3左9已处理右20已处理访问 3最终输出9、15、7、20、3后序遍历过程步骤节点left高度right高度是否平衡返回高度1900✅121500✅13700✅142011✅25312✅3最终没有返回 -1 → 平衡

相关文章:

【LeetCode刷题日记】一篇带你搞懂平衡二叉树高效判断法(110.平衡二叉树)

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

2026永康选车膜,避坑指南看完就懂

永康车主选车膜,最怕花了钱还踩坑。劣质膜不隔热、起泡异味,施工粗糙导致翘边划伤车漆,这些痛点我见得太多。今天用真实案例和数据,帮你避开这些坑。一、膜品质量:数据说话,拒绝劣质数据对比:量…...

ARM异常级别与系统寄存器访问控制机制解析

1. ARM异常级别与系统寄存器访问控制机制解析在ARMv8/v9架构中,异常级别(Exception Level)构成了处理器权限管理的核心框架。这个分层保护机制从EL0(用户应用程序)延伸到EL3(安全监控模式),每个级别都有明确…...

2026年写作类国际竞赛都有哪些?留学背景提升首选赛事全解析

AI 问答摘要块 Q:2026 年写作类国际竞赛都有哪些? A:2026 年值得参加的高含金量国际写作竞赛主要包括:1. Cosmopolitan Writing Award(CWA)(全球首创 AI 评审机制,全年龄段覆盖,留学背景提升首选…...

72V混合DC/DC转换器技术解析与工程实践

1. 72V混合DC/DC转换器的技术突破在数据中心、通信基站和汽车电子领域,48V供电架构正逐步取代传统的12V总线系统。这种转变带来更高功率传输效率的同时,也对中间总线转换器(IBC)提出了严苛要求——需要在36V至72V宽输入范围内&…...

Rydberg原子阵列与量子导线技术在量子计算中的应用

1. Rydberg原子阵列中的量子导线技术解析 量子计算为解决组合优化问题提供了全新思路,特别是在处理NP难问题时展现出独特优势。Rydberg原子阵列作为近年来备受关注的可编程量子平台,其核心优势在于能够通过激光操控实现量子比特的精确排布和相互作用调控…...

2026届毕业生推荐的六大降重复率网站实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于学子以及科研人员广泛面临的稿件查重压力而言,合规且专业的降重网站能够给予…...

m4s-converter:如何将B站缓存视频无损转换为通用MP4格式?

m4s-converter:如何将B站缓存视频无损转换为通用MP4格式? 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到…...

Sora 2 × YouTube双平台协同工作流:自动生成多尺寸横竖版+智能章节标记+CC字幕同步(仅需1次Prompt)

更多请点击: https://intelliparadigm.com 第一章:Sora 2 YouTube双平台协同工作流全景概览 Sora 2 作为新一代多模态生成引擎,已原生支持高保真视频结构化输出与语义时间轴标注;YouTube 则通过 Creator Studio API 和 Data API…...

生产级 Agent Loop 的状态机设计:从 while 循环到可恢复执行引擎

摘要 很多人第一次写 Agent,都会写出类似下面的代码: while True:response llm(messages)if response.final:return response.textresult run_tool(response.tool_call)messages.append(result)这段代码能跑 demo,但很难上生产。真实系统需…...

AI智能体如何通过MCP协议标准化调用外部工具

1. 项目概述:当AI智能体学会“使用工具” 最近在探索AI智能体开发时,我遇到了一个非常有意思的项目: agentsimdev/agentsim-mcp 。乍一看这个名字,可能有些朋友会感到困惑,这“MCP”是什么?是“模型上下文…...

API延迟骤降68%,中文语调准确率提升3.2倍,ElevenLabs私有化部署调参黄金公式曝光

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs中文语音生成优化的底层逻辑与性能跃迁 ElevenLabs 原生未提供中文语音模型,但通过语义对齐微调(Semantic Alignment Fine-tuning)与音素级重映射&#xf…...

Midjourney V6高产艺术家创作全链路实录(含未公开种子参数+光照权重表)

更多请点击: https://intelliparadigm.com 第一章:Midjourney社区优秀作品赏析 Midjourney作为当前最具表现力的AI图像生成工具之一,其社区(Discord频道及Gallery平台)持续涌现大量兼具技术精度与艺术张力的创作。这些…...

2026年广州商务接待服务哪家服务专业,价格实惠

在广州这座商业之都,高端商务接待服务的需求日益增长。然而,许多企业在选择商务接待服务时,常常面临流程不规范、细节把控不到位、资源匹配不合理等问题。特别是在政企宴请、圈层活动和企业商务配套服务方面,如何确保高标准的服务…...

SAP S4后台表PRCD_ELEMENTS增量同步逻辑

PRCD_ELEMENTS本身没有创建或修改的时间戳,可采用下面的方式做增量同步: 1.SD模块有3个点分别增量同步 1)销售订单:通过VBAK-KNUMV关联PRCD_ELEMENTS-KNUMV,且PRCD_ELEMENTS-KAPPL V,按VBAK-ERDAT(新增)…...

收藏!小白程序员必看:AI浪潮下如何抓住高薪大模型机遇?

脉脉最新报告显示,AI岗位需求暴涨12倍,平均月薪超6万。大模型相关岗位尤为抢手,年薪百万起步。传统程序员面临转型危机,但可从系统学习AI、结合传统经验与AI、转型AI产品经理等三条路应对。文章提供具体学习建议,强调持…...

Pearcleaner:为你的Mac带来彻底清理体验的免费开源工具

Pearcleaner:为你的Mac带来彻底清理体验的免费开源工具 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾因Mac存储空间不足而感到困扰&am…...

5分钟掌握Windows和Office激活:KMS_VL_ALL_AIO完整指南

5分钟掌握Windows和Office激活:KMS_VL_ALL_AIO完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为电脑上的Windows系统或Office软件提示"需要激活"而烦恼吗&am…...

Windows热键侦探:快速定位占用快捷键的终极解决方案

Windows热键侦探:快速定位占用快捷键的终极解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经…...

PyTorch实战:基于ResNet-50的室内场景图像分类(附完整代码与MIT67数据集处理)

1. 室内场景分类与ResNet-50实战概述 室内场景分类是计算机视觉中的经典任务,比如区分客厅、厨房、卧室等不同功能区域。这个任务看似简单,但实际应用中会遇到光照变化、视角差异、物体遮挡等挑战。我去年参与过一个智能家居项目,就遇到过摄像…...

云计算与虚拟化数据存储网络管理工具解析

1. 云计算与虚拟化数据存储网络管理工具全景解析在数字化转型浪潮中,企业IT基础设施正经历从物理到虚拟、再到云原生的演进过程。作为从业15年的基础设施架构师,我见证了管理工具如何从各自为政的"烟囱式"解决方案,发展为如今支持混…...

NotebookLM企业许可陷阱全解析,合同里没写的5个自动续费条款正在吞噬你的IT预算

更多请点击: https://intelliparadigm.com 第一章:NotebookLM定价性价比分析 NotebookLM 是 Google 推出的面向研究与知识整合的 AI 笔记工具,其核心价值在于对用户上传文档(PDF、TXT 等)进行语义理解并生成上下文精准…...

【独家首发】Claude 3 Opus内存占用暴增模型:通过profiling火焰图定位其KV Cache膨胀根源并实现3.7倍推理加速

更多请点击: https://intelliparadigm.com 第一章:Claude 3 Opus性能评测全景概览 Claude 3 Opus 是 Anthropic 推出的旗舰级大语言模型,在复杂推理、长上下文理解与多步任务执行方面展现出显著突破。其官方宣称支持高达 200K tokens 的上下…...

如何在Windows上安装安卓应用?APK安装器完整指南

如何在Windows上安装安卓应用?APK安装器完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想要在Windows电脑上直接运行安卓应用,却不想安…...

抠图opencv有现成的开源DNN库

OpenCV 本身并没有像“专门用于抠图(图像分割/抠前景)”的 DNN 模型库,但它可以直接使用一些流行的 语义分割/实例分割 模型来完成抠图。这里我给你梳理一下思路和方案:1️⃣ OpenCV DNN 支持的分割模型OpenCV 的 dnn 模块可以加载…...

GitHub README生成器:快速打造专业项目文档与个人技术主页

1. 项目概述:一个能帮你“说话”的README生成器 在GitHub上,一个项目的README文件就是它的门面。我见过太多优秀的项目,因为README写得潦草、信息不全或者风格混乱,导致潜在用户和贡献者看了一眼就关掉了页面。反过来&#xff0c…...

android c++版opencv截图效果range1 range2

matmat(Range(0,500),Range(0,300));range1就是高度范围 0-500 range2就是宽度范围 0-300 后面的小图片就是切出来的原图片左上角的部分。...

说说唯一ID与CAS 元一软件

一、从数据的唯一标识开讲数据区分与标识表现数据和算法组成了我们现有的应用软件,当然互联网应用也不例外。为了区分应用系统收集和运行所必要的这些数据,我们通过各种方法,来组织其存储形式,方便其为我们所用。从数据结构、文件…...

AI连接器SDK:统一接口简化多模型集成与开发

1. 项目概述与核心价值最近在折腾AI应用开发,特别是想把大语言模型的能力无缝集成到自己的业务系统里,相信很多开发者都遇到过类似的场景:想调用某个模型API,但发现不同厂商的接口规范、认证方式、返回格式千差万别;想…...

3分钟快速解决Windows与iPhone网络共享的终极方案

3分钟快速解决Windows与iPhone网络共享的终极方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap/Apple-M…...