剑指offer-39、平衡⼆叉树

news/2025/11/19 9:02:27/文章来源:https://www.cnblogs.com/sevencoding/p/19226244

题⽬描述

输⼊⼀棵节点数为 n ⼆叉树,判断该⼆叉树是否是平衡⼆叉树。

在这⾥,我们只需要考虑其平衡性,不需要考虑其是不是排序⼆叉树

平衡⼆叉树( Balanced Binary Tree ),具有以下性质:它是⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过 1 ,并且左右两个⼦树都是⼀棵平衡⼆叉树。

样例解释:

思路及解答

自顶向下递归(基础解法)

平衡树意味着我们需要对⽐任何在同⼀个根下的左右⼦树的⾼度差,还记得之前我们计算树的⾼度么,使⽤递归⽅式来解决,其实这道题与算⾼度差不多,只是两边⾼度需要算出⼀个差值。

算法的主要思想:

  • 不断对⽐每两个节点的左右⼦树的最⼤⾼度差,注意取差的绝对值,需要⼩于等于1
  • 对⽐完左右⼦树之后,需要递归左⼦树以及右⼦树进⾏分别判断,都满⾜才是平衡树
public class Solution79 {public boolean IsBalanced_Solution(TreeNode root) {if (root == null) return true;// 当前左右⼦树是否平衡以及左右⼦树分别是否平衡return Math.abs(depth(root.left) - depth(root.right)) <= 1 &&IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);}private int depth(TreeNode root) {if (root == null) {return 0;}// 递归获取深度return Math.max(depth(root.left), depth(root.right)) + 1;}
}
  • 时间复杂度 O(nlogn) :最差情况下,需要遍历树所有节点判断是否平衡,需要O(n)。但是判断每个节点最⼤⾼度需要递归左右⼦树,需要占⽤ O(log2n) ,所以总共占⽤ O(Nlog2n)
  • 空间复杂度 O(n) :最差情况下,也就是树退化为链表时,递归需要使⽤ O(n) 的栈空间,严格意义上递归栈也需要空间。

自底向上递归(优化解法)

上⾯的计算,仔细观察就会发现会有很多重复计算的过程,⽐如下⾯的数,计算⼦树深度的时候,计算 1 的左⼦树,和计算 2 的,基本都重复了。

应该如何避免这种重复计算呢?前⾯的是⾃顶向下的⽅式,因为每个节点都得把⼦树计算⼀遍才需要重复,如果我们从下往上计算,那不就避免了重复计算。后序遍历,先判断子树平衡性,再判断当前节点,对⽐逻辑如下:

  • 如果当前节点为空,⾼度为0
  • 如果当前节点的左⼦树的⾼度为-1,那么说明不平衡,否则,需要计算右⼦树⾼度,同样需要不等于-1,如果两者的差不符合⼩于等于1,那么说明它们不平衡,返回-1。通过这样 -1 异常值就会⼀路返回,到最初的调⽤处,得到不平衡的结果。
public class Solution79 {public boolean IsBalanced_Solution(TreeNode root) {// 空树if (root == null) {return true;}return getHeight(root) != -1;}public int getHeight(TreeNode root) {if (root == null) {return 0;//空节点高度为0}// 左⼦树的⾼度int left = getHeight(root.left);if (left < 0) {return -1;//左子树不平衡,直接返回}// 右⼦树的⾼度int right = getHeight(root.right);if (right < 0) {return -1;//右子树不平衡,直接返回}// 检查当前节点是否平衡return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);}
}
  • 时间复杂度 O(n) :每个节点计算⼀次
  • 空间复杂度 O(n) :递归需要使⽤额外堆栈空间

笔试面试时,建议首选这个方式,效率最优,代码简洁

封装信息法(面向对象思路)

通过自定义类同时返回高度和平衡信息,代码结构更清晰。

class BalanceInfo {boolean isBalanced;int height;BalanceInfo(boolean isBalanced, int height) {this.isBalanced = isBalanced;this.height = height;}
}public class Solution {public boolean isBalanced(TreeNode root) {return checkBalance(root).isBalanced;}private BalanceInfo checkBalance(TreeNode node) {if (node == null) {return new BalanceInfo(true, 0); // 空节点平衡且高度为0}// 递归检查左右子树BalanceInfo leftInfo = checkBalance(node.left);BalanceInfo rightInfo = checkBalance(node.right);// 如果子树不平衡,直接返回if (!leftInfo.isBalanced || !rightInfo.isBalanced) {return new BalanceInfo(false, -1); // 高度值此时不重要}// 检查当前节点是否平衡if (Math.abs(leftInfo.height - rightInfo.height) > 1) {return new BalanceInfo(false, -1);}// 返回当前节点的平衡信息和高高度int currentHeight = Math.max(leftInfo.height, rightInfo.height) + 1;return new BalanceInfo(true, currentHeight);}
}

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

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

相关文章

2025年口碑好的在线硬度计热门厂家推荐榜单

2025年口碑好的在线硬度计热门厂家推荐榜单行业背景与市场趋势随着制造业向智能化、数字化方向快速发展,硬度测试作为材料性能评估的关键环节,其重要性日益凸显。根据《2024-2029全球与中国在线硬度计市场现状及未来…

2025 最新压花辊源头厂家权威推荐榜:国际测评认证 + 全品类适配,优选高性价比实力制造商皮革压花辊/塑胶压花辊/塑木地板压花辊/PVC 压花辊/布料压花辊/木材压花辊厂家推荐

引言 在压花辊采购市场中,“源头直采” 已成为制造企业控制成本、保障品质的关键路径,但市场中中间商加价、劣质产品冒充优质货源等乱象,严重阻碍了采购效率与生产稳定性。为破解这一痛点,本次榜单依托国际压花设备…

计划成立一个反隐私组织

计划成立一个反隐私组织成员之间所有信息是通过一定的方式公开、共享、透明的

第5章 生成式AI项目的管理新挑战

第5章 生成式AI项目的管理新挑战作为对前文所述AI项目管理新范式的深化与扩展,本章聚焦于生成式AI这一迅猛发展的领域。生成式AI项目继承了传统AI项目的数据驱动、不确定性等核心特征,同时在其基础上,对项目管理的四…

2025年热门的硬度计硬度块厂家推荐及采购参考

2025年热门的硬度计硬度块厂家推荐及采购参考行业背景与市场趋势硬度测试作为材料性能评估的关键指标,在制造业、科研机构和质量检测领域扮演着不可或缺的角色。根据中国仪器仪表行业协会最新发布的《2024-2025年中国…

2025 最新推荐!权威测评认证光选机厂家榜:AI 多模态 + 高光谱技术,覆盖全场景分选需求废塑料/薄膜/高光谱材质/日杂分选/整瓶分选/餐盒分选光选机厂家推荐

引言 在再生资源循环与固废处理行业升级浪潮中,光选机的技术迭代成为提升资源回收率的核心引擎。据国际再生资源回收协会(BIR)最新测评数据显示,全球优质光选机品牌需通过材质识别精度、连续运行稳定性、能耗控制三…

实用指南:Android Studio新手开发第二十二天

实用指南:Android Studio新手开发第二十二天2025-11-19 08:53 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

2025年评价高的金相预磨机厂家推荐及选择指南

2025年评价高的金相预磨机厂家推荐及选择指南行业背景与市场趋势金相预磨机作为材料微观分析的关键设备,在金属加工、机械制造、汽车工业、航空航天、电子制造及科研检测等领域发挥着不可替代的作用。根据中国材料研究…

2025 软著申请公司最新推荐榜:国际协会权威测评认证,全流程高效代办 + 政策精准把控优质机构合集计算机软著申请/企业软著申请/个人软著申请/软著申请代办公司推荐

引言 在数字经济全球化发展的浪潮下,软件著作权已成为企业技术创新保护、市场竞争突围的核心要素,更是对接各类产业扶持政策的关键凭证。然而当前软著申请服务市场乱象频发,服务质量参差不齐,部分机构存在专业能力…

2025年比较好的金相分析厂家最新TOP实力排行

2025年比较好的金相分析厂家最新TOP实力排行行业背景与市场趋势金相分析作为材料科学研究和工业质量控制的关键环节,在金属加工、机械制造、航空航天、电子元器件等领域发挥着不可替代的作用。根据全球市场研究机构Ma…

UE4+C++构建-(五十三)UE4工程中引入第三方C++的.DLL第12篇-模块规则材料(.Build.cs)-第6篇-将第三方预编译库文件(.lib)添加到当前模块的公共链接库列表中

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 最新推荐智能分选设备厂家排行榜:覆盖 260 + 材质识别 国际测评认证 再生资源 / 固废处理优选绿色分拣中心/可回收物/生活垃圾塑料薄膜智能分选设备公司推荐

引言 全球资源循环利用行业正面临分选效率与纯度双重瓶颈,传统人工分拣模式已难以适配规模化、精细化处理需求,智能分选设备成为行业转型核心支撑。据国际再生资源回收协会(BIR)最新测评数据显示,优质智能分选设备…

linux c文件复制

在 Linux 中,复制 C 文件可以通过多种方式实现,以下是几种常见的方法:? 方法 1:使用 cp 命令 这是最简单直接的方式: cp source.c destination.csource.c:源文件路径 destination.c:目标文件路径(可以是相对路…

实现一种超轻量级的有线表格识别方法(有代码,可部署)

一.简介 在无意间看到一篇CBMS2021的一篇论文《NanoNet: Real-Time Polyp Segmentation in Video Capsule Endoscopy and Colonoscopy》, 该论文是专为视频胶囊内窥镜和结肠镜图像的息肉分割设计的架构,是一种医学图…

2025年质量好的贵金属电刷厂家选购指南与推荐

2025年质量好的贵金属电刷厂家选购指南与推荐行业背景与市场趋势贵金属电刷作为电气接触领域的关键部件,广泛应用于汽车、工业控制、航空航天、医疗设备等高精尖领域。随着全球工业4.0进程加速和新能源汽车市场爆发式…

深入解析:IT运维干货:lnav开源日志分析工具详解与CentOS实战部署

深入解析:IT运维干货:lnav开源日志分析工具详解与CentOS实战部署pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

渗透测试

渗透测试渗透测试与web漏洞的区别 内网IP和公网IP

2025年口碑好的油门踏板电刷优质厂家推荐榜单

2025年口碑好的油门踏板电刷优质厂家推荐榜单行业背景与市场趋势随着全球汽车产业向电动化、智能化方向快速发展,油门踏板电刷作为汽车电子控制系统中的关键部件,其市场需求呈现稳定增长态势。根据中国汽车工业协会最…

CF2097B Baggage Claim

显然只有走直线和拐弯两种情况。 对于第一种情况显然是固定的。 第二种情况可能能够取两个点,我们将其连边,现在相当于对每条边都要选出一个代表点,每条边的代表点不同,问你有多少种方案数,按照树,基环树,其他情…