每日一题-判断是否是平衡二叉树
判断是否是平衡二叉树
- 题目描述
- 数据范围
- 题解
- 解题思路
- 递归算法
- 代码实现
- 代码解析
- 时间和空间复杂度分析
- 示例
- 示例 1
- 示例 2
- 总结
)
题目描述
输入一棵节点数为 n 的二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树定义为:
- 它是一棵空树。
- 或者它的左右子树的高度差的绝对值不超过1,并且左右子树本身也是平衡二叉树。
平衡二叉树的性质:
- 空树被认为是平衡二叉树。
- 每个节点的左右子树高度差不超过1。

数据范围
n ≤ 100- 每个节点的值
val满足0 ≤ val ≤ 1000
题解
解题思路
我们可以通过深度优先搜索(DFS)来判断一棵二叉树是否是平衡二叉树。具体步骤如下:
- 定义树的高度: 计算任意一个节点的左子树和右子树的高度。
- 平衡性判断: 如果某个节点的左右子树的高度差超过1,树就不平衡;否则继续判断该节点的左右子树。
- 递归遍历: 对树的每个节点递归地进行平衡性判断。
递归算法
我们可以通过递归来判断二叉树的平衡性,同时在递归过程中计算树的高度。递归的核心思想是:
- 如果左右子树的高度差超过1,返回
false。 - 否则继续判断左右子树的平衡性。
为了避免重复计算,我们可以在递归时直接返回每个子树的高度。
代码实现
#include <stdbool.h>// 定义二叉树节点结构体
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;
};// 计算树的高度
int height(struct TreeNode* pRoot) {if (pRoot == NULL)return 0; // 空树高度为0int left = height(pRoot->left); // 左子树的高度int right = height(pRoot->right); // 右子树的高度if (left == -1 || right == -1 || abs(left - right) > 1) {return -1; // 如果左右子树高度差超过1,返回-1,表示不平衡}return 1 + (left > right ? left : right); // 返回树的高度
}// 判断是否为平衡二叉树
bool IsBalanced_Solution(struct TreeNode* pRoot) {return height(pRoot) != -1; // 如果高度返回-1,表示不平衡
}
代码解析
-
height函数: 计算二叉树的高度,同时判断树是否平衡。- 如果当前节点为空,返回高度
0。 - 递归计算左子树和右子树的高度。
- 如果某个子树的高度差超过1,或者某个子树本身不平衡(返回
-1),就返回-1表示树不平衡。 - 否则,返回当前树的高度。
- 如果当前节点为空,返回高度
-
IsBalanced_Solution函数: 通过调用height函数来判断整棵树是否平衡。如果height返回-1,则说明树不平衡,返回false;否则返回true。
时间和空间复杂度分析
- 时间复杂度:
O(n)。每个节点只会被访问一次,时间复杂度为O(n),其中n是树的节点数。 - 空间复杂度:
O(h)。递归调用栈的深度是树的高度h,最坏情况下(例如完全不平衡的树),空间复杂度为O(n)。
示例
示例 1
输入:
{1,2,3,4,5,6,7}
输出:
true
示例 2
输入:
{}
输出:
true
总结
本题通过递归遍历二叉树,计算每个节点的左右子树高度,同时判断左右子树的高度差是否超过1来判断树是否平衡。时间复杂度为 O(n),空间复杂度为 O(h),其中 n 是节点数,h 是树的高度。非常难得是居然一次编译直接成功了,太开心了。题刷百编,其意自现。
相关文章:
每日一题-判断是否是平衡二叉树
判断是否是平衡二叉树 题目描述数据范围题解解题思路递归算法代码实现代码解析时间和空间复杂度分析示例示例 1示例 2 总结 ) 题目描述 输入一棵节点数为 n 的二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树定义为: 它是一棵空树。或者它的左右子树…...
FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验
文章目录 FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验概述笔记my_fltk_test.cppfltk_test.hfltk_test.cxx用adjuster工程试了一下,好使。END FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验 概述 用fluid搭建UI…...
《多阶段渐进式图像修复》学习笔记
paper:2102.02808 GitHub:swz30/MPRNet: [CVPR 2021] Multi-Stage Progressive Image Restoration. SOTA results for Image deblurring, deraining, and denoising. 目录 摘要 1、介绍 2、相关工作 2.1 单阶段方法 2.2 多阶段方法 2.3 注意力机…...
AWScurl笔记
摘要 AWScurl是一款专为与AWS服务交互设计的命令行工具,它模拟了curl的功能并添加了AWS签名版本4的支持。这一特性使得用户能够安全有效地执行带有AWS签名的请求,极大地提升了与AWS服务交互时的安全性和有效性。 GitHub - okigan/awscurl: curl-like acc…...
QT使用eigen
QT使用eigen 1. 下载eigen https://eigen.tuxfamily.org/index.php?titleMain_Page#Download 下载后解压 2. QT引入eigen eigen源码好像只有头文件,因此只需要引入头文件就好了 qt新建项目后。修改pro文件. INCLUDEPATH E:\222078\qt\eigen-3.4.0\eigen-3.…...
揭示Baklib企业内容管理系统CMS的核心功能与应用价值
内容概要 企业内容管理系统(CMS)是指通过一系列工具和技术,帮助企业高效地创建、存储、管理和分发数字内容的系统。这些系统在现代企业运作中发挥着至关重要的作用,尤其是在信息量大、业务流程复杂的环境中。Baklib作为一个突出的…...
如何跨互联网adb连接到远程手机-蓝牙电话集中维护
如何跨互联网adb连接到远程手机-蓝牙电话集中维护 --ADB连接专题 一、前言 随便找一个手机,安装一个App并简单设置一下,就可以跨互联网的ADB连接到这个手机,从而远程操控这个手机做各种操作。你敢相信吗?而这正是本篇想要描述的…...
flume和kafka整合 flume和kafka为什么一起用?
Flume和Kafka一起使用的主要原因是为了实现高效、可靠的数据采集和实时处理。12 实时流式日志处理的需求 Flume和Kafka结合使用的主要目的是为了完成实时流式的日志处理。Flume负责数据的采集和传输,而Kafka则作为消息缓存队列,能够有效地缓冲数据,防止数据堆积或丢…...
java.util.Random类(详细案例拆解)(已完结)
前言: 小编打算近期更俩三期类的专栏,一些常用的专集类,给大家分好类别总结和详细的代码举例解释。 今天是除夕,小编先祝贺大家除夕快乐啦!! 今天是第六个 java.lang.Math 包中的 java.util.Random类 我…...
Java后端之AOP
AOP:面向切面编程,本质是面向特定方法编程 引入依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>示例:记录…...
【信息系统项目管理师-选择真题】2008上半年综合知识答案和详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7~8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16~20题】【第21题】【第22题】【第23题】【第24题】【第25题…...
go到底是什么意思:对go的猜测或断言
go这个单词,简单地讲,表示“走或去”的意思: go v.去;走 认真想想,go是一个非常神秘的单词,g-和o-这两个字母,为什么就会表达“去;走”的意思呢?它的字面义或本质&…...
零刻SER7接口及配置跑分
今天入手了一台迷你机-零刻SER7 ,不得不说这机身是真的小啊,相比于传统台式机,它几乎不占空间,可以轻松放置在桌面、电视柜甚至背包中,非常适合需要频繁移动或空间有限的用户。尽管体积小巧,但零刻SER7在性…...
【Java基础-41.5】深入解析Java异常链:构建清晰的错误追踪体系
在Java编程中,异常处理是保证程序健壮性和可维护性的重要部分。然而,在实际开发中,异常往往不是孤立发生的,而是由一系列相关的异常引发的。为了更好地理解和处理这种复杂的异常场景,Java引入了 异常链(Exc…...
【Python实现机器遗忘算法】复现2023年TNNLS期刊算法UNSIR
【Python实现机器遗忘算法】复现2023年TNNLS期刊算法UNSIR 1 算法原理 Tarun A K, Chundawat V S, Mandal M, et al. Fast yet effective machine unlearning[J]. IEEE Transactions on Neural Networks and Learning Systems, 2023. 本文提出了一种名为 UNSIR(Un…...
Object类(3)
大家好,今天继续给大家介绍一下object类中的方法,那么话不多说,来看。 hashcode()这个方法,帮我们算了一个具体的对象位置,这里面涉及到数据结构,简单认为它是个内存地址,然后调用Integer.toHexString ()将这个地址以16进制输出。 该方法是一…...
Zookeeper(32) Zookeeper的版本号(version)是什么?
在 Zookeeper 中,每个节点都有多个版本号(version),用于跟踪节点的状态变化。版本号帮助 Zookeeper 实现乐观并发控制,确保在并发环境中的数据一致性。主要的版本号包括: version:数据版本号&a…...
C# as 和 is 运算符区别和用法
前言 在C#中,as 和 is 关键字都用于处理类型转换的运算符,但它们有不同的用途和行为。本文我们将详细解释这两个运算符的区别和用法。 is 运算符 is 运算符用于检查对象是否是某个特定类型,或者是否可以转换为该类型。它返回一个布尔值 (t…...
求解旅行商问题的三种精确性建模方法,性能差距巨大
文章目录 旅行商问题介绍三种模型对比求解模型1决策变量目标函数约束条件Python代码 求解模型2决策变量目标函数约束条件Python代码 求解模型3决策变量目标函数约束条件Python代码 三个模型的优势与不足 旅行商问题介绍 旅行商问题 (Traveling Salesman Problem, TSP) 是一个经…...
SQL-leetcode—1193. 每月交易 I
1193. 每月交易 I 表:Transactions ---------------------- | Column Name | Type | ---------------------- | id | int | | country | varchar | | state | enum | | amount | int | | trans_date | date | ---------------------- id 是这个表的主键。 该表包含…...
从零开始在个人项目中接入Taotoken的完整步骤与体会
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始在个人项目中接入Taotoken的完整步骤与体会 最近在维护一个个人开发的智能写作助手项目,最初直接使用了某家模…...
从架构到应用:DNNGP、DeepGS与DLGWAS三大基因预测模型深度剖析
1. 基因预测模型的崛起与挑战 基因组学研究正在经历一场由AI驱动的革命。过去十年间,随着高通量测序技术的普及,生物医学领域积累了海量的基因数据,但传统统计方法在处理复杂性状预测时逐渐显得力不从心。正是在这样的背景下,DNNG…...
CST实战指南 | 场路协同仿真中的元器件模型导入与验证
1. 场路协同仿真中的元器件模型导入基础 我第一次接触CST场路协同仿真时,最头疼的就是如何把各种元器件模型正确导入到仿真环境中。经过多次项目实践,我发现这其实是个系统性工程,需要根据不同的仿真场景和元器件类型采取不同的处理策略。 在…...
如何3步完成B站视频转文字:开源工具Bili2text完整指南
如何3步完成B站视频转文字:开源工具Bili2text完整指南 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在信息爆炸的时代,视频内容占据…...
Motorola LS2208条码扫描器USB接口模式解析与Python数据采集实战
1. 项目概述:从“扫码枪”到数据采集终端在仓库、快递站或者超市收银台,我们每天都能看到工作人员拿着一个像手枪一样的东西,“嘀”一声,商品信息就录入了系统。这个设备就是条码扫描器,很多人习惯叫它“扫码枪”。你可…...
STHS34PF80红外存在检测:InfraredPD算法库集成与调试实战
1. 项目概述与核心价值最近在折腾一个智能家居的节能项目,核心需求是让设备能精准判断房间里到底有没有人,而不是简单地检测到有物体移动就触发。市面上很多基于PIR(被动红外)的运动传感器,对于静止不动的人体识别效果…...
音乐学者必看的NotebookLM冷启动指南,从乐谱OCR识别到和声进行语义建模,一步到位
更多请点击: https://intelliparadigm.com 第一章:NotebookLM在音乐学研究中的范式革命 NotebookLM(由Google Research推出的基于用户上传文档的AI助手)正悄然重塑音乐学研究的方法论边界。它不再依赖通用知识库的模糊匹配&#…...
使用 Taotoken 后模型 API 响应延迟与稳定性效果实测观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken 后模型 API 响应延迟与稳定性效果实测观察 作为一名需要频繁调用大模型 API 的开发者,模型服务的响应速…...
Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现
Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud订阅模式为设…...
AI编程也开始“贵价提速”?Cursor上线Opus极速模式,官方却劝你:别开,真不值!
前言各位码农老铁们,最近有没有感觉写代码像在开手动挡老爷车——油门踩到底,AI还在“思考人生”?别急,Cursor贴心地给你装了个“涡轮增压”:Claude Opus 4.7 Fast mode,号称速度拉满、输出飞起!…...
