Leetcode 110. 平衡二叉树

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

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

在这里插入图片描述
在这里插入图片描述

解答

解法一:多次遍历 O(n^2)

思路简单。

对于每一个结点都需要遍历一下左右子树,找到左右子树高度,然后判断是否符合平衡二叉树条件。

这导致时间复杂度变成 O(n^2) 。

代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(root == null) return true;
        
        int left = height(root.left);
        int right = height(root.right);
        return Math.abs(left - right) <= 1 && isBalanced(root.left) && isBalanced(root.right);
    }
    
    private int height(TreeNode node) {
        if(node == null) return 0;
        return Math.max(height(node.left), height(node.right)) + 1;
    }
}
结果

在这里插入图片描述

解法二:一次遍历 O(n)

在获取高度的时候,顺便判断一下是否满足平衡二叉树的条件。

代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    class Result {
        int height;
        boolean isBalanced;
        
        Result(int height, boolean isBalanced) {
            this.height = height;
            this.isBalanced = isBalanced;
        }
    }
    
    public boolean isBalanced(TreeNode root) {
        return helper(root).isBalanced;
    }
    
    private Result helper(TreeNode node) {
        if(node == null) {
            return new Result(0, true);
        }
        
        Result left = helper(node.left);
        Result right = helper(node.right);
        if(!left.isBalanced || !right.isBalanced) return new Result(0, false);
        if(Math.abs(left.height - right.height) <= 1) {
            return new Result(Math.max(left.height, right.height) + 1, true);
        }
        
        return new Result(0, false);
    }
}
结果

在这里插入图片描述
发现效率提升不大,猜测可能是因为大量 Result 对象的构造导致。可使用全局变量继续优化。

优化代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    boolean res = true;
    public boolean isBalanced(TreeNode root) {
        helper(root);
        return res;
    }
    
    private int helper(TreeNode node) {
        if(node == null) return 0;
        
        int left = helper(node.left);
        int right = helper(node.right);
        if(Math.abs(left - right) > 1) {
            res = false;
            return -2; // 提前结束递归
        }
        
        return Math.max(left, right) + 1;
    }
}
结果

在这里插入图片描述

能否不使用全局变量呢?可以。

最终代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        return helper(root) >= 0;
    }
    
    private int helper(TreeNode node) {
        if(node == null) return 0;
        
        int left = helper(node.left);
        int right = helper(node.right);
        if(left >= 0 && right >= 0 && Math.abs(left - right) <= 1) {
            return Math.max(left, right) + 1;
        }
        
        return -1;  // 表明已经不平衡
    }
}
结果

在这里插入图片描述

力扣(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. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 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...

dashe5547的博客 322

实战解析:利用Wireshark解密QQ通信协议

本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。

weixin_29210727的博客 407

leetcode 110. 平衡二叉树 balanced binary tree

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:示例 1: 示例 2:示例 3: 提示:思路是对二叉树做先序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。算法流程: recur(root):isBalanced(root) :复杂度分析:思路是构造一个获取当前节点最大深度的方法 depth(root) ,通过比较此子树的左右子树的最大高度差abs(depth(root.left) - depth(root.right)),来判断此子树是否

we 666

睿尔曼超轻量仿人机械臂--机械臂接口介绍

本文介绍了睿尔曼超轻量仿人机械臂的控制器接口及末端接口。

realman_Rop的博客 3434

从零开始:在Ubuntu 22.04上配置Isaac Gym Preview 3环境(含常见错误解决方案)

本文提供了在Ubuntu 22.04系统上从零开始配置Isaac Gym Preview 3环境的完整实战指南。内容涵盖NVIDIA驱动安装、Conda环境搭建、CUDA与PyTorch版本精准匹配、Isaac Gym核心安装与验证,并重点介绍了针对四足机器人等复杂系统的强化学习训练环境配置、常见错误解决方案及性能调优技巧,旨在帮助开发者高效部署这一高性能物理仿真平台。

weixin_29048775的博客 391

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中, 一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两 个子树的高度差的绝对值不超过1

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

Light丶Long的博客 1953

AI驱动Spine骨骼动画生成:从图像拆分到动画自动化的全流程解析

计算机视觉与生成式AI技术正深度赋能传统数字内容生产流程。在2D动画制作领域,骨骼动画技术通过模拟真实生物关节运动,实现了角色动画的高效制作与灵活控制。其核心原理在于将角色拆分为独立部件,通过骨骼层级关系驱动部件变换,结合关键帧插值算法生成流畅动作。这项技术的工程价值在于大幅降低动画制作门槛,提升内容生产效率,尤其适用于游戏开发、影视预演、广告设计等需要快速原型迭代的场景。本文聚焦于如何利用SIFT特征匹配、RANSAC几何验证等CV算法实现部件自动对位,并结合动画12原则的程序化实现,构建从单张角色立绘到

weixin_28696185的博客 1513

Leetcode(110)——平衡二叉树

Leetcode(110)——平衡二叉树 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 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, 50

KCDCY的博客 730

glm-4v-9b环境配置全攻略:从CUDA版本冲突到bitsandbytes异常排查(RTX A4000实测)

本文详细介绍了在RTX A4000显卡上配置GLM-4V-9B多模态大模型的完整流程,重点解决CUDA版本冲突和bitsandbytes异常问题。通过4-bit量化技术显著降低显存占用,提供从环境预检到量化部署的实战指南,帮助开发者在有限显存环境下高效运行大模型。

weixin_30369041的博客 405

【Segment Anything Model】十(1):利用SAM做分类任务,方法二,不放过SAM强大特征提取能力,将SAM提取到的ImageEmbedding插入到其他cnn网络中

直接黏贴复制就好'''该类定义了VGG-16的基本结构。features: 代表VGG网络的主体部分,即所有的卷积层和池化层。avgpool: 是自适应平均池化层,将特征图大小调整为7x7。classifier: 是VGG网络的分类部分,由全连接层组成。_initialize_weights(): 初始化权重的方法。

cvxiayixiao的博客 3561

平衡二叉树

题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 输入:root = [3, 9, 20, null, null, 15, 7] 输出:true 输入:root = [1, 2, 2, 3, 3, null, null, 4, 4] 输出:false 示例3: 输入:root = [ ] 输出:true 提示: 树中的节点数在范围 [0, 5000] 内 -104 <= Node.val &l

qq_36314864的博客 1190

【人工智能】在 cc-switch 中配置 AnyRouter 接入 Claude Code 完整指南

本文介绍了在cc-switch工具中配置AnyRouter中转服务以接入Claude Code的详细步骤。主要内容包括:1) 准备API令牌和端点地址;2) 填写基础信息和模型参数;3) 保存配置并重启终端生效;4) 常见问题排查方法。重点强调了API地址格式、模型ID准确性以及配置写入的必要性,帮助用户顺利完成中转服务配置,实现Claude 4.5版本的正常使用。

奶爸的编程之路,也就一周冷个三天 3102

力扣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

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 273

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode 力扣 110. 平衡二叉树

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

wind_liang的博客 508

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Leetcode110. 平衡二叉树

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

会流泪de鱼的博客 341

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

力扣第110题:平衡二叉树

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

weixin_48941116的博客 630

[每日一题]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

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

LeetCode110-平衡二叉树

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

viva_la__vida的博客 179

LeetCode110. 平衡二叉树Golang版

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

菜到不敢run 224

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

【每日力扣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

力扣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 108. 将有序数组转换为二叉搜索树
下一篇: Leetcode 111. 二叉树的最小深度
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值