力扣110:平衡二叉树

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
会一些的技术:数据分析、算法、SQL、大数据相关、python
欢迎加入社区:码上找工作
作者专栏每日更新:
LeetCode解锁1000题: 打怪升级之旅
python数据分析可视化:企业实战案例
python源码解读
程序员必备的数学知识与应用

题目描述

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

示例

示例

输入:

    3/ \9  20/  \15   7

输出:True

题目解读

要判断这棵树是否为高度平衡的,根据定义,一个高度平衡的二叉树要求每个节点的左右两个子树的高度差的绝对值不超过 1。我们可以通过计算每个节点的左右子树的高度来进行判断。

  1. 根节点(值为 3):

    • 左子树的高度为 1 (只有节点 9)
    • 右子树的高度为 2 (包含节点 20,以及 20 的子节点 15 和 7)

    高度差为 |1 - 2| = 1,满足平衡树的条件。

  2. 节点 20:

    • 左子树的高度为 1 (只有节点 15)
    • 右子树的高度为 1 (只有节点 7)

    高度差为 |1 - 1| = 0,满足平衡树的条件。

  3. 节点 9

    • 左子树的高度为 0 (无子节点)
    • 右子树的高度为 0 (无子节点)

    高度差为 |0 - 0| = 0,满足平衡树的条件。

  4. 节点 15 和 节点 7

    • 作为叶子节点,左右子树高度都为 0

    高度差为 |0 - 0| = 0,满足平衡树的条件。

方法一:自顶向下的递归

解题步骤
  1. 递归函数定义:定义一个辅助函数 height 来计算二叉树的最大高度。
  2. 平衡判断:对每个节点,使用 height 函数计算左右子树的高度,检查高度差是否不超过 1,并递归地对所有子节点进行同样的操作。
Python 示例
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef isBalanced(root):def height(node):""" 计算树的高度 """if not node:return 0return max(height(node.left), height(node.right)) + 1if not root:return Trueleft_height = height(root.left)right_height = height(root.right)return abs(left_height - right_height) <= 1 and isBalanced(root.left) and isBalanced(root.right)# 示例调用
root = TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))
print(isBalanced(root))  # 输出: True
算法分析
  • 时间复杂度:(O(n^2)),在最坏的情况下,对于每个节点都需要重新计算高度。
  • 空间复杂度:(O(n)),递归栈的深度。

方法二:自底向上的递归

解题步骤
  1. 优化递归:计算节点高度的同时,检查子树是否平衡。
  2. 早停机制:一旦发现子树不平衡,立即停止计算并返回。
Python 示例
def isBalanced(root):def check(node):if not node:return 0left = check(node.left)if left == -1:return -1right = check(node.right)if right == -1:return -1if abs(left - right) > 1:return -1return max(left, right) + 1return check(root) != -1# 示例调用
print(isBalanced(root))  # 输出: True
算法分析
  • 时间复杂度:(O(n)),每个节点访问一次。
  • 空间复杂度:(O(n)),递归栈的深度。

以下是自顶向下递归和自底向上递归两种方法进行平衡二叉树检查的优劣势对比表格,专注于这两种常见且实用的解决方案:

方法优点缺点
自顶向下递归- 易于理解和实现
- 教学有益,直观展示递归检查过程
- 效率较低:重复计算高度
- 时间复杂度为 (O(n^2)),对于大树效率低
自底向上递归- 高效,避免重复计算
- 每个节点只访问一次,时间复杂度 (O(n))
- 实现相对复杂
- 需要理解返回值的同时进行两种检查(高度和平衡性)

应用示例和适用场景:

  • 自顶向下递归:适用于小规模的数据或教育目的,特别是在解释和教学二叉树相关概念时,因为它简单且直接展示了递归过程和基本的树操作。
  • 自底向上递归:适用于大规模数据处理,尤其在性能要求较高的系统中,如大数据处理和实时系统,其中计算效率至关重要。

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

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

相关文章

义乌玩具CPC认证公司

义乌玩具CPC认证公司概况 简介 义乌玩具CPC认证公司主要为儿童玩具产品提供符合美国消费品安全委员会&#xff08;CPSC&#xff09;制定的儿童产品证书&#xff08;Childrens Product Certificate, CPC&#xff09;的服务。CPC认证涉及的产品范围广泛&#xff0c;包括但不限于…

LVS的三种工作模式---(DR/TUN/NAT)

目录 一、NAT模式&#xff08;LVS-NAT&#xff09; 二、IP隧道模式&#xff08;LVS-TUN&#xff09; 三、DR模型--直接路由模式&#xff08;LVS-DR&#xff09; LVS/DR模式ARP抑制 原因&#xff1a; LVS的DR工作模式及配置&#xff1a; LVS的NAT工作模式及配置&#xff1…

PyQt6--Python桌面开发(7.QTextEdit多行富文本框控件)

QTextEdit多行富文本框控件 保存文件到本地QLine多行文本框.ui import sys import time from PyQt6.QtGui import QValidator,QIntValidator from PyQt6.QtWidgets import QApplication,QLabel,QLineEdit,QTextEdit from PyQt6 import uic,QtGuiif __name__ __main__:appQApp…

二叉树进阶 --- 上

目录 1. 二叉搜索树的概念及结构 1.1. 二叉搜索树的概念 1.2. 二叉搜索树的结构样例 2. 二叉搜索树的实现 2.1. insert 的非递归实现 2.2. find 的非递归实现 2.3. erase 的非递归实现 2.3.1. 第一种情况&#xff1a;所删除的节点的左孩子为空 2.3.1.1. 错误的代码 2…

基本QinQ

拓扑图 配置 开启LLDP功能&#xff0c;查看是否能通过QinQ隧道透传 sysname AR1 # lldp enable # interface GigabitEthernet0/0/0.10dot1q termination vid 10ip address 12.1.1.1 255.255.255.0 arp broadcast enable # sysname AR2 # lldp enable # interface GigabitE…

天童教育:孩子是难以改变的,除非他感觉到爱

在家长眼里&#xff0c;明明对孩子上了很多心&#xff0c;但是孩子就是很顽固&#xff0c;软硬皆施都收效甚微&#xff0c;家长们束手无策。都说孩子是最容易接受知识的熏陶的年纪&#xff0c;为什么看起来这样难以改变呢&#xff1f; 孩子有问题&#xff0c;往往因为内在的渴…

地磁暴红色预警来袭,普通人该如何应对?绝绝子的防护指南来了

近日&#xff0c;国家空间天气监测预警中心发布了一则令人瞩目的消息——地磁暴红色预警。这一预警不仅提醒我们地磁暴即将影响我国的电离层和低轨卫星&#xff0c;更让我们深刻认识到地球空间环境的脆弱性和复杂性。对于普通公众而言&#xff0c;地磁暴的概念可能相对陌生&…

随手集☞springboot知识盘点

概述 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队开发&#xff0c;旨在简化和加速基于Java的应用程序的开发过程。它提供了一套开发工具和约定&#xff0c;使得构建独立、可执行的、生产级别的Spring应用变得更加容易。Spring Boot的主要目标是减少开发者在项目…

【每日刷题】Day37

【每日刷题】Day37 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 2391. 收集垃圾的最少总时间 - 力扣&#xff08;LeetCode&#xff09; 2. 1614. 括号的最大嵌套深度…

你可能喜欢但也许还不知道的好用网站-搜嗖工具箱

在线工具 https://www.zxgj.cn/ 作为一个工作生活好帮手&#xff0c;在线咨询网站提供了丰富的实用功能&#xff0c;从工作中的图表制作、图片修改到生活中的各种测试、健康、娱乐、学习、理财等等涵盖面很广。 在线工具网站从界面和操作上来看对用户也很友好&#xff0c;页面…

论文研读 An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale

完整翻译 《An Image is Worth 16x16 Words》完整版翻译_an image is worth 16*16words-CSDN博客 大神讲解 Vision Transformer详解-CSDN博客 视频讲解 11.1 Vision Transformer(vit)网络详解_哔哩哔哩_bilibili 学习整理 简要概述&#xff1a;Vision Transformer&#xff…

Typescript高级: 深入理解断言

概述 关于断言&#xff0c;就是TS 类型断言&#xff0c;即把两种能有重叠关系的数据类型进行相互转换的一种 TS 语法把其中的一种数据类型转换成另外一种数据类型类型断言和类型转换产生的效果一样&#xff0c;但语法格式不同TS 类型断言语法格式&#xff1a;A 数据类型的变量…

在 Kubernetes 上运行 Apache Spark 进行大规模数据处理的实践

在刚刚结束的 Kubernetes Community Day 上海站&#xff0c;亚马逊云科技在云原生分论坛分享的“在 Kunernets 上运行 Apache Spark 进行大规模数据处理实践”引起了现场参与者的关注。开发者告诉我们&#xff0c;为了充分利用 Kubernetes 的高可用设计、弹性&#xff0c;在越来…

AIGC (AI-Generated Content) 技术深度探索:现状、挑战与未来愿景

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f916; AIGC技术&#xff1a;塑造未来的创意与内容革命 &#x1f31f;引言 &#x1f680;AIGC技术发展现状 &#x1f4c8;核心技术驱动 &#x1f4a1;应用领域拓展 &#x1f310; 面临的挑战 ❌真实性与伦理考量 &am…

SAP-CentralFinance - 会计核算中的组织要素 - 学习心得1

1. 定义SAP组织架构和理解各组织架构含义 组织结构遍布SAP 系统的所有重要功能范围。FI 中最重要的组织要素是公司代码。它是“财务会计”中的最小组织单位,可以为其编制自主式完整科目集供外部报告使用。其他重要的组织要素是利润中心业务范围和段。您可以为各个利润中…

大模型微调之 在亚马逊AWS上实战LlaMA案例(十)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;十&#xff09; 训练数据集格式 SageMaker JumpStart 目前支持域适应格式和指令调整格式的数据集。在本节中&#xff0c;我们指定两种格式的示例数据集。有关更多详细信息&#xff0c;请参阅附录中的数据集格式化部分。 …

Vue进阶(贰零捌)浏览器地址栏URL防篡改攻略

文章目录 一、前言二、动态路由三、Params 参数四、在 URL 中使用加密参数五、参数转码六、综述七、拓展阅读 一、前言 在应用 vue.js 开发前端项目时&#xff0c;浏览器中url 地址栏参数的处理是一个很基础但却很重要的问题。在很多情况下&#xff0c;我们需要从 url 中获取参…

采购管理软件:采购自动化提高效率的5种方式

在采购领域&#xff0c;手动数据输入和耗时的文书工作的时代已经落后了。采购自动化正在改变游戏规则&#xff0c;使企业能够简化流程、降低成本并提高效率。 以下是采购自动化帮助企业提高效率的5种方法。 采购管理软件,采购自动化管理,8Manage SRM,高亚科技 减少手动流程和…

安卓手机APP开发__屏幕兼容性概述

安卓手机APP开发__屏幕兼容性概述 目录 概述 屏幕大小 灵活的布局 备选的布局 可改写的图像 像素的深度 深度依赖 备选的位图 向量图形 概述 安卓运行各种各样的设备&#xff0c;它们有不同的屏幕大小和屏幕的像素深度。 系统执行基本的缩放和变形来适配在不同的屏幕…

iview(viewUI) span-method 表格实现将指定列的值相同的行合并单元格

效果图是上面这样的&#xff0c;将第一列的名字一样的合并在一起&#xff1b; <template><div class"table-wrap"><Table stripe :columns"columns" :data"data" :span-method"handleSpan"></Table></div&…