算法的学习笔记—平衡二叉树(牛客JZ79)


😀前言
在数据结构中,二叉树是一种重要的树形结构。平衡二叉树是一种特殊的二叉树,其特性是任何节点的左右子树高度差的绝对值不超过1。本文将介绍如何判断一棵给定的二叉树是否为平衡二叉树,重点关注算法的时间复杂度和空间复杂度。
🏠个人主页:尘觉主页
文章目录
- 🥰平衡二叉树
- 💝题目描述
- 例子
- 💞算法思路
- 💕代码实现
- 代码解释
- 时间和空间复杂度
- 😄总结
🥰平衡二叉树
NowCoder
💝题目描述
给定一棵二叉树,判断它是否是平衡二叉树。我们只需要考虑树的平衡性,而不需要考虑树是否是排序二叉树。根据定义,一棵树是平衡的,如果它是一棵空树,或者它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树。
例子
以下是一个平衡二叉树的例子:

对于上述树,任何节点的左右子树高度差都不超过1,因此这是一棵平衡二叉树。
💞算法思路
我们将使用深度优先搜索(DFS)的方法来判断树的平衡性。我们的主要思路如下:
- 递归遍历树的每一个节点,计算每个节点的左子树和右子树的高度。
- 在计算高度的过程中,判断当前节点的左右子树的高度差是否超过1。
- 如果发现某个节点的高度差超过1,立即返回,标记树为不平衡。
- 最后返回树是否平衡的结果。
💕代码实现
下面是 Java 语言实现的代码:
// 定义一个布尔变量,用于跟踪树是否平衡
private boolean isBalanced = true;// 主函数,判断二叉树是否平衡
public boolean IsBalanced_Solution(TreeNode root) {// 调用辅助方法计算树的高度height(root);// 返回平衡状态return isBalanced;
}// 辅助函数,递归计算树的高度
private int height(TreeNode root) {// 如果节点为空,返回高度0// 如果树已经被标记为不平衡,则直接返回if (root == null || !isBalanced)return 0;// 递归计算左子树的高度int left = height(root.left);// 递归计算右子树的高度int right = height(root.right);// 检查当前节点的左右子树高度差是否超过1// 如果高度差超过1,则将isBalanced标记为falseif (Math.abs(left - right) > 1)isBalanced = false;// 返回当前节点的高度,当前节点的高度为左右子树高度的最大值加1return 1 + Math.max(left, right);
}
代码解释
TreeNode类定义了二叉树的节点结构。IsBalanced_Solution方法是主要的入口函数,调用height方法计算树的高度并检查平衡性。height方法递归地计算每个节点的高度,并在计算过程中检查左右子树的高度差。
时间和空间复杂度
- 时间复杂度:O(n),其中 n 是节点数。每个节点只被访问一次。
- 空间复杂度:O(1),不需要额外的空间用于存储状态,但递归调用栈的空间复杂度为 O(h),其中 h 是树的高度。在最坏情况下(例如一条链),h 可能等于 n。
😄总结
通过递归方法,我们可以高效地判断一棵二叉树是否为平衡二叉树。这种方法不仅直观,而且在时间和空间复杂度上都表现良好。通过以上示例代码,开发者可以轻松实现并验证二叉树的平衡性
😁热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章:
算法的学习笔记—平衡二叉树(牛客JZ79)
😀前言 在数据结构中,二叉树是一种重要的树形结构。平衡二叉树是一种特殊的二叉树,其特性是任何节点的左右子树高度差的绝对值不超过1。本文将介绍如何判断一棵给定的二叉树是否为平衡二叉树,重点关注算法的时间复杂度和空间复杂度…...
SSM学习day01 JS基础语法
一、JS基础语法 跟java有点像,但是不用注明数据类型 使用var去声明变量 特点1:var关键字声明变量,是为全局变量,作用域很大。在一个代码块中定义的变量,在其他代码块里也能使用 特点2:可以重复定义&#…...
kubeadm快速自动化部署k8s集群
目录 一、准备环境 二、安装docker--三台机器都操作 三、使用kubeadm部署Kubernetes 在所有节点安装kubeadm和kubelet、kubectl 配置启动kubelet(所有主机) master节点初始化 Mater重新完成初始化 执行Master初始化后的提示配置 配置使用网络插件 创建flannel网络 …...
解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)
文章目录 引言I 解决方案方案1:使用JsonAutoDetect注解方案2:手动编写get方法,JsonProperty注解加到方法上。方案3:首字母改成小写的II 知识扩展:对象默认是怎样被序列化?引言 需求: JSON序列化时,使用@JsonProperty注解,将字段名序列化为首字母大写,兼容前端和第三方…...
分布式理论基础
文章目录 1、理论基础2、CAP定理1_一致性2_可用性3_分区容错性4_总结 3、BASE理论1_Basically Available(基本可用)2_Soft State(软状态)3_Eventually Consistent(最终一致性)4_总结 1、理论基础 在计算机…...
Java应用程序的测试覆盖率之设计与实现(二)-- jacoco agent
说在前面的话 要想获得测试覆盖率报告,第一步要做的是,采集覆盖率数据,并输入到tcp。 而本文便是介绍一种java应用程序部署下的推荐方式。 作为一种通用方案,首先不想对应用程序有所侵入,其次运维和管理方便。 正好,jacoco agent就是类似于pinpoint agent一样,都使用…...
【机器学习】13. 决策树
决策树的构造 策略:从上往下学习通过recursive divide-and-conquer process(递归分治过程) 首先选择最好的变量作为根节点,给每一个可能的变量值创造分支。然后将样本放进子集之中,从每个分支的节点拓展一个。最后&a…...
《a16z : 2024 年加密货币现状报告》解析
加密社 原文链接:State of Crypto 2024 - a16z crypto译者:AI翻译官,校对:翻译小组 当我们两年前第一次发布年度加密状态报告的时候,情况跟现在很不一样。那时候,加密货币还没成为政策制定者关心的大事。 比…...
Laravel 使用Simple QrCode 生成PNG遇到问题
最近因项目需求,需要对qrcode 进行一些简单修改,发现一些问题,顺便记录一下 目前最新的版本是4.2,在环境是 PHP8 ,laravel11 的版本默认下载基本是4.0以上的 如下列代码 QrCode::format(png)->generate(test);这样…...
一站式学习 Shell 脚本语法与编程技巧,踏出自动化的第一步
文章目录 1. 初识 Shell 解释器1.1 Shell 类型1.2 Shell 的父子关系 2. 编写第一个 Shell 脚本3. Shell 脚本语法3.1 脚本格式3.2 注释3.2.1 单行注释3.2.2 多行注释 3.3 Shell 变量3.3.1 系统预定义变量(环境变量)printenv 查看所有环境变量set 查看所有…...
批处理操作的优化
原来的代码 Override Transactional(rollbackFor Exception.class) public void batchAddQuestionsToBank(List<Long> questionIdList, Long questionBankId, User loginUser) {// 参数校验ThrowUtils.throwIf(CollUtil.isEmpty(questionIdList), ErrorCode.PARAMS_ERR…...
机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用
市场应用背景 DELTA并联机械手是由三个相同的支链所组成,每个支链包含一个转动关节和一个移动关节,具有结构紧凑、占地面积小、高速高灵活性等特点,可在有限的空间内进行高效的作业,广泛应用于柔性上下料、包装、分拣、装配等需要…...
RHCE-web篇
一.web服务器 Web 服务器是一种软件或硬件系统,用于接收、处理和响应来自客户端(通常是浏览器)的 HTTP 请求。它的主要功能是存储和提供网站内容,比如 HTML 页面、图像、视频等。 Web 服务器的主要功能 处理请求…...
Java - 人工智能;SpringAI
一、人工智能(Artificial Intelligence,缩写为AI) 人工智能(Artificial Intelligence,缩写为AI)是一门新的技术科学,旨在开发、研究用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统…...
MFC开发,给对话框添加定时器
定时器简介 定时器的主要功能是设置以毫秒为单位的定时周期,然后进行连续定时或单次定时。 定时器是用于设置有规律的去触发某种动作所用的,这种场景也是软件中经常可以用到的,比如用户设置规定时间推送提示的功能,又比如程序定…...
LED灯珠:技术、类型与选择指南
目录 1. LED灯珠的类型 2. LED灯珠技术 3. 如何选择LED灯珠 4. 相关案例和使用情况 5. 结论 LED(Light Emitting Diode)灯珠是一种半导体发光器件,通过电流在固体半导体中流动时,其工作原理是电子与空穴的结合,通过…...
C语言二刷
const #include<stdio.h> int main() {const int amount 100;int price 0;scanf("%d", &price);int change amount - price;printf("找您%d元\n", change);return 0; } 浮点数类型 输入输出float(单精度)%f%f %l…...
C++模块化程序设计举例
1、模块1 在main.cpp里输入下面的程序: #include "stdio.h" //使能printf()函数 #include <stdlib.h> //使能exit(); #include "Static_Variable.h" //argc 是指命令行输入参数的个数; //argv[]存储了所有的命令行参数; //argv[0]通常…...
毕业设计选题:基于Python的招聘信息爬取和可视化平台
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 采集的数据列表 招聘数据大屏 摘要 本系统通过对网络爬虫的分析,研究智…...
机器人学习仿真框架
机器人学习仿真框架一般包含(自底向上): 3D仿真物理引擎:对现实世界的模拟仿真机器人仿真平台:用于搭建工作场景,以实现agent与环境的交互学习学习算法框架集合:不同的策略学习算法的实现算法测…...
三菱Q00/PLC与台达DTA温控器通讯案例 功能:通过三菱QJ71C24N模块与台达DTA温...
三菱Q00/PLC与台达DTA温控器通讯案例 功能:通过三菱QJ71C24N模块与台达DTA温控器进行modbus-rtu通讯,实现温度读取、实际输出率(%)读取,及温度的设定、和温控探头类型的设定,PLC本体232-COM口与电脑通讯&am…...
听说读写画样样精通!美团开源LongCat-Next,给物理世界AI统一了语言
美团刚刚开源了最强原生多模态模型LongCat-Next,将物理世界AI的语言统一了。LongCat-Next模型能听,能说。比如语音问答,或者让它用指定音色说话,能读能写(视觉理解和推理),还能画画和设计&#…...
LumiPixel Canvas Quest超现实主义创作:生成融合自然与机械的赛博格人像
LumiPixel Canvas Quest超现实主义创作:生成融合自然与机械的赛博格人像 1. 当AI画笔遇见赛博格幻想 打开LumiPixel Canvas Quest的第一感觉,就像拿到了通往异世界的钥匙。这个擅长超现实题材的AI艺术工具,最近在我们团队内部掀起了一阵&qu…...
基于西门子S7-1200的换热站PLC与换热器程序,V16及以上博图WinCC画面组态,手自动...
换热站plc程序换热器程序 (22)采用西门子S7-1200博图WinCC画面组态,博图V16及以上版本都可以仿真运行,无需硬件。 系统带有手动/自动模式,运行数据动态实时显示,带温度实时曲线显示,…...
告别繁琐安装!3分钟用PPTist打造专业级在线演示文稿
告别繁琐安装!3分钟用PPTist打造专业级在线演示文稿 【免费下载链接】PPTist 基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示。支持导出PPT文…...
open-parse快速入门:5分钟掌握智能文档解析的终极方法
open-parse快速入门:5分钟掌握智能文档解析的终极方法 【免费下载链接】open-parse Improved file parsing for LLM’s 项目地址: https://gitcode.com/gh_mirrors/op/open-parse open-parse是一款专为LLM(大语言模型)优化的智能文档解…...
从WordPress同步到数据库:一个真实案例拆解n8n节点间的“数据对话”
从WordPress到数据库:用n8n构建数据管道的实战解剖 当你点击WordPress后台的"发布"按钮时,一篇新文章如何穿越数字世界,精准落入目标数据库的表格中?这背后是一场由n8n节点编排的精密数据芭蕾。本文将带你走进一个真实的…...
RAG-SQL Router实战:让AI智能判断文档与数据库查询,小白也能轻松搭建收藏版
本文介绍RAG-SQL Router系统,解决AI问答时判断信息来源(文档或数据库)的困境。通过LlamaIndex框架和OpenAI模型,实现智能路由决策,支持非结构化和结构化数据查询。提供完整代码和实战步骤,帮助开发者快速搭…...
告别纯理论:用OAI 5G开源平台+USRP B210硬件,实测端到端5G SA数据业务
从零构建5G SA实验环境:OAI开源平台与USRP B210实战指南 当5G技术从实验室走向商业化应用时,许多开发者面临一个尴尬的现实:理论知识与实际操作之间存在巨大鸿沟。本文将带你跨越这道鸿沟,使用OAI开源平台和USRP B210软件定义无线…...
LIN Switch Method:从硬件革新到软件流程,揭秘车内氛围灯自动寻址的完整闭环
1. 为什么车内氛围灯需要自动寻址技术 十年前的车内照明还停留在基础功能阶段,而现在的高端车型已经将氛围灯玩出了新花样。想象一下,当你打开车门时,迎宾灯像流水一样从车头滑向车尾;调节空调温度时,出风口周围的灯光…...
