【LeetCode110】平衡二叉树

LeetCode110平衡二叉树 算法特点及适用场景特点利用递归的思想巧妙地将判断二叉树是否为平衡二叉树的问题转化为计算子树高度并检查高度差的子问题,代码逻辑清晰简洁,符合二叉树这种具有递归结构的数据结构特点,易于理解和实现。通过在计算高度过程中及时标记不平衡的情况(返回 -1),能准确地判断二叉树是否满足平衡二叉树的定义。时间复杂度为 ,在节点数量不是特别庞大时,能够有效地判断二叉树的平衡性,但随着节点数增多,计算量增长相对较快,效率会有所下降。适用场景。 阅读详情

题目描述

给定一个二叉树,判断它是否是 平衡二叉树

思路与算法

二叉树是平衡的,如果对于每个节点,它的左子树和右子树之间的高度差最多为 1。
注意:根据上述定义,单独计算根节点的左右子树高度,然后进行高度比较,是不对的。
所以应该递归地确定每个子树的高度;同时,检查每个节点的平衡条件。(两个动作)

创建一个辅助函数(我们称之为 checkBalance )

  • 如果子树是平衡的,返回其高度
  • 如果是不平衡的,返回特殊值(比如-1)
  1. base case: 如果一个节点是 None ,那么它是一个高度为 0 的空子树。这被认为是平衡的。
  2. 递归步骤
    • 对于给定的节点,递归计算其左子树和右子树的高度。
    • 检查当前节点是否平衡
      • 如果左子树或右子树不平衡(即,递归调用返回 -1),那么当前节点的子树也不平衡——立即返回 -1。
      • 如果两个子树都是平衡的,那么检查它们高度之间的差异
      • 如果差值超过 1,则以当前节点为根的树是不平衡的;返回 -1
      • 否则,当前节点的高度是其左子树和右子树高度的最大值加 1。
  3. 结果整合
    Once the helper function completes for the root
    • 如果返回 -1,则树是不平衡的
    • 否则,树是平衡的

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:

        def checkBalance(node: TreeNode) -> int:
            # base case
            if not Node:
                return 0
            
            leftHight = checkBalance(node.left)
            if leftHight == -1:
                return -1
            
            rightHeight = checkBalance(node.right)
            if rightHeight == -1:
                return -1
            
            if abs(leftHight - rightHeight) > 1:
                return -1
            
            return 1 + max(leftHight, rightHeight)
        return checkBalance(root) != -1
        

总结与反思

  1. 将明确定义的递归步骤转换为代码或伪代码
    • 书写base case(s)
      • Clearly define the simplest case(s) where the answer is known
      • 在代码中,这通常以一个 if 语句的形式出现,该语句check base case 并立即返回一个值。
    • 如果f(n)是你的函数,展示f(n)是如何依赖f(n-1)或其它实例的
    • 通过arithmetic operations, concatenation, or some form of aggregation.合并子问题结果
  2. 何时考虑使用辅助函数进行代码实现?
    • 如果你的递归解决方案需要额外的信息(例如当前深度、边界或任何其他状态),而这些信息不属于原始函数的签名,那么使用辅助函数是个好主意。当你想要将复杂性隐藏在主接口之外,或者使代码更有组织和模块化时,也可以使用辅助函数。
      • 例如,在平衡二叉树问题中,辅助函数返回子树的高度和一个标志,指示子树是否平衡。这些额外的信息在原始函数签名中并未提供,因此将递归逻辑封装在辅助函数中可以保持主函数的接口简洁。
      • 在平衡树检查中,主函数 isBalanced 只需要知道辅助函数返回的是有效高度还是特殊值(如 -1),就可以判断是否平衡
  3. 递归实现时,哪些内容可以放入辅助函数?
    • 包括核心递归算法:基本情况、递归调用、子问题结果的组合,以及在递归过程中必须保持的任何额外状态或信息。
力扣(LeetCode) 110: 平衡二叉树 - 解法思路 给定一个二叉树,判断它是否是高度平衡的。高度平衡二叉树是指每个节点的两个子树的深度差不超过 1 的二叉树。对于每个节点,|左高度 - 右高度| ≤ 1左右子树也都是高度平衡的空树被认为是平衡的(高度 = 0)在一次遍历中同时计算高度和平衡状态。这避免了重复计算,并将时间复杂度从 O(n²) 降低到 O(n)。自底向上方法恰好访问每个节点一次,使其成为最优解决方案。 阅读详情

相关推荐

【简单】力扣算法题解析LeetCode110:平衡二叉树

本文介绍了一种高效的算法来判断二叉树是否平衡。平衡二叉树的定义是每个节点的左右子树高度差不超过1,且所有子树都平衡。 算法思路:采用自底向上的递归方法(DFS),通过计算子树高度并检查平衡性来优化效率。若子树不平衡,立即返回-1提前终止递归。时间复杂度为O(n),空间复杂度为O(h)。 代码实现:主函数isBalanced调用辅助函数height计算高度,若返回值不为-1则树平衡。height函数递归计算子树高度并检查平衡性,不平衡时返回-1,否则返回当前节点高度。 优化点:通过提前终止递归避免无效计算,提

ylumwd的博客 473

力扣110--平衡二叉树-java

力扣110–平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / 4 4 返回 false 。 通过次数117,289提交次数

Jacksonfan1的博客 353

microblaze之Video Processing Subsystem调试误区

内容:总结video processing subsystem调试中遇到的问题,以及在解决问题中的思路方法论,引为前车之鉴。 1,我的目的是希望采用vps中的scaler模块对图像进行拉伸缩小。IP的配置如下: 2,整个系统的框架图如下,仅比上期的内容增加了scaler模块,如下: 3,查手册,可以知道这个scaler only组件分成了hscale,vscale和GPIO,其中GPIO是控制上下游stream流控设备复位用,暂时忽略。 hscale和vscale的寄存器空间如下,主要关注图

YDY5659150的专栏 3555

LeetCode 力扣 110. 平衡二叉树

题目描述(简单难度) 判断一棵树是否是平衡二叉树,平衡二叉树定义如下: 它是一棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树。 解法一 直接按照定义来吧,并且多定义一个求高度的函数,之前在 104 题 做过。 public boolean isBalanced(TreeNode root) { //它是一棵空树 if (root == ...

wind_liang的博客 508

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误

本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。

k5l6m的博客 224

DVWA靶场实战:从搭建到渗透测试的完整指南

本文详细介绍了DVWA靶场的搭建与渗透测试全流程,涵盖LAMP环境搭建、Docker部署及集成环境安装三种方式。通过SQL注入、文件上传漏洞等实战案例,帮助读者掌握Web安全测试技巧,并提供防御方案与进阶调优建议,是网络安全学习的实用指南。

weixin_28312391的博客 488

Leetcode110. 平衡二叉树

Leetcode110. 平衡二叉树 题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7]        3       /  \   ...

会流泪de鱼的博客 341

基于ESP32的气象雷达站设计与实现

物联网技术通过嵌入式设备实现环境数据的实时采集与可视化,其中ESP32凭借其双核处理器和WiFi/蓝牙功能成为热门选择。本项目利用ESP32结合LVGL图形库,构建了一个低成本气象监测系统,通过OpenWeatherMap API获取全球气象数据并在7英寸触摸屏上动态展示。系统采用三级优化策略处理高分辨率雷达图,包括服务端预处理、硬件加速解码和显示增强,有效解决了内存占用和帧率问题。在物联网设备开发中,类似方案可应用于智能家居、农业监测等场景,特别是需要实时数据可视化的领域。通过SPIFFS存储和zlib压

weixin_42524864的博客 422

力扣第110题:平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。:一个二叉树,若每个节点的左右子树的高度差的绝对值不超过1,则该树是高度平衡的。

weixin_48941116的博客 630

对称加密中GCM和CBC俩种加密模式的区别

**CBC(Cipher Block Chaining)** 和 **GCM(Galois/Counter Mode)** 是两种常见的对称加密模式。它们的主要区别体现在加密方式、性能和安全性上。

闲人 1107

Autosar MCAL-S32K324 Fls配置-基于EB

Autosar MCAL Flash配置,基于S32K324,EB软件

赞的博客 1514

[每日一题]Leetcode 110 平衡二叉树

Leetcode 110 平衡二叉树题目思路代码及出现的问题 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \

qq_42246695的博客 410

C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取

本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1323

LeetCode110. 平衡二叉树Golang版

LeetCode110. 平衡二叉树Golang版 1. 问题描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 2. 思路 2.1. 递归 确定递归函数参数和返回值 func isBalanced(root *TreeNode) bool 确定结束条件 if root == nil { return true } 确定单层递归逻辑 l := he

菜到不敢run 224

【教程4>第4章>第12节】通过FPGA实现基于FFT变换的频偏估计和补偿

基于FFT变换的频偏估计和补偿,其基本原理如下:而频偏补偿的目的是将频偏后的信号频谱移回原来的位置。

FPGA/MATLAB学习教程/源码/项目合作开发 882

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode第110题 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / ...

weixin_30702413的博客 216

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode110-平衡二叉树

LeetCode110-平衡二叉树 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 解法 方法一:自顶向下递归 判断当前节点的左右子树是否是二叉平衡树,然后判断自身是否是二叉平衡树。 缺点:计算高度的函数会被重复调用 class Solution { public boolean isBalanced(TreeNode root) { if(root == null) retur

viva_la__vida的博客 179

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【每日力扣Leetcode】110-判断一个二叉树是不是平衡二叉树

力扣题库110,判断一个二叉树是不是平衡二叉树。 题目链接点这里。 文章目录题目描述解题思路初始答案改进答案注意事项 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,

T型人小付的博客 442

LeetCode 110.平衡二叉树

LeetCode 110.平衡二叉树 题目 110. 平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \

qq_42499133的博客 183

力扣110.平衡二叉树

平衡二叉树就是所有节点的左右子树的深度相差不超过1的二叉树,判断子树深度写到一个函数中,将判断左右子树是否平衡用一个函数实现,主函数中遍历二叉树判断该二叉树是否为平衡二叉树

2301_80505422的博客 378

leetcode 110.平衡二叉树

leetcode 110.平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1...

EngineerHe的博客 1366

LeetCode第110题:平衡二叉树

LeetCode第110题:平衡二叉树 问题描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null...

朕蹲厕唱忐忑的博客 276

110.力扣LeetCode_平衡二叉树

本文介绍了两种判断二叉树平衡性的方法。方法1采用递归分治思想,先判断左右子树是否平衡,再通过depth函数计算高度差,但存在重复计算问题。方法2优化为后序遍历结合异常值传递,在计算高度的同时完成平衡校验,通过返回-1标记不平衡状态,避免重复遍历。方法2的时间效率更高,通过一次递归同时完成高度计算和平衡判断。两种方法都遵循递归思想,但方法2通过整合高度计算与平衡校验,显著提升了算法效率。

2401_82472941的博客 299

golang力扣leetcode 110. 平衡二叉树

110. 平衡二叉树110. 平衡二叉树题解代码 110. 平衡二叉树 110. 平衡二叉树 题解 思路用分治法,左边平衡 && 右边平衡 && 左右两边高度 <= 1才为true 代码 /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func i

清风 441

LeetCode 力扣 110. 平衡二叉树 balanced binary tree

大家觉得写还可以,可以点赞、收藏、关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录110. 平衡二叉树题目描述示例示例 1:示例 2:分析代码实现提交结果 110. 平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3

motongxue的博客 246

力扣练习-- 110. 平衡二叉树

两种写法都意识到了这是个有false就中体false的题目。方法一的解决方法是定义true变量,有false则修改。方法二是直接利用了逻辑且的运算,代码更加简洁。思路:分治算法,分而治之。将二叉树分为左右子树步步为营诸葛击破。给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。本题中,一棵高度平衡二叉树定义为:一个二叉树。概述:每个结点的左右子树深度相差小于2即可。

m0_71445814的博客 254
上一篇: 【go语言圣经1.3】
下一篇: 【Go语言圣经1.5】
Pyroyster
博客等级 码龄7年 206粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值