当前位置: 首页 > news >正文

( “树” 之 DFS) 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, 5000] 内
  • −104<=Node.val<=104-10^4 <= Node.val <= 10^4104<=Node.val<=104

思路:自底向上的递归

自底向上递归的做法类似于后序遍历:

  • 对于当前遍历到的节点,先递归地判断其左右子树是否平衡;
  • 再判断以当前节点为根的子树是否平衡。如果存在一棵子树不平衡,则整个二叉树一定不平衡, 则返回。
  • 如果一棵子树是平衡的,则返回其高度(取左右子树最大值);

代码:(Java、C++)

Java

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {private boolean result = true;public boolean isBalanced(TreeNode root) {height(root);return result;}public int height(TreeNode root){if(root == null) return 0;int left = height(root.left);int right = height(root.right);if(Math.abs(left - right) > 1){result = false;return 0;}return 1 + Math.max(left, right);}
}

C++

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool result = true;bool isBalanced(TreeNode* root) {height(root);return result;}int height(TreeNode* root){if(root == NULL) return 0;int left = height(root->left);int right = height(root->right);if(abs(left - right) > 1){result = false;return 0;}return 1 + max(left, right);}
};

运行结果:

在这里插入图片描述

复杂度分析:

  • 时间复杂度O(n)O(n)O(n),其中 n 是二叉树中的节点个数。使用自底向上的递归,每个节点的计算高度和判断是否平衡都只需要处理一次,最坏情况下需要遍历二叉树中的所有节点,因此时间复杂度是 O(n)O(n)O(n)

  • 空间复杂度O(n)O(n)O(n),其中 n 是二叉树中的节点个数。空间复杂度主要取决于递归调用的层数,递归调用的层数不会超过 n

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

相关文章:

( “树” 之 DFS) 110. 平衡二叉树 ——【Leetcode每日一题】

110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] …...

nvm软件使用-同一个环境下控制多个不同node版本

1.使用场景 nvm是一个用于管理Node.js版本的工具&#xff0c;它可以让你在同一台机器上安装和切换不同的Node.js版本。使用nvm的好处有以下几点&#xff1a; 1.1.nvm可以让你轻松地测试你的代码在不同的Node.js版本下的兼容性和性能&#xff0c;避免因为版本差异导致的问题。…...

连续两个南航的研究生面试出了从来没出现过的问题,本科和研究生都是计算机专业的,竟然说static是不可更改的。

最近面试人数有点多&#xff0c;面试有点频繁&#xff0c;因此发现了一些学生普遍会发生的错误&#xff0c;可以说是很离谱。 因为做了十多年的面试官&#xff0c;无论是大中小厂的面试&#xff0c;还是社招、校招。 从来没有遇到过这样的情况&#xff0c;而且发生在两个南航…...

How to install nacos/nacos-server:v2.1.2-slim with docker

今天给大家介绍一下如何基于Docker的nacos/nacos-server:v2.1.2-slim镜像安装nacos 1、Data Source 我们需要从nacos的github官网下载nacos 2.12发布包 nacos-server-2.1.2.tar.gznacos-server-2.1.2.zip 这里以nacos-server-2.1.2.tar.gz为例来介绍&#xff0c;解压后我们…...

Rust社区引发舆论危机,问题到底出在哪儿?

围绕开源的法律问题&#xff0c;讨论焦点往往集中在开源许可证、软件著作权等方面&#xff0c;商标的讨论却极少引人关注。事实上&#xff0c;关于开源软件以及开源软件的衍生产品的商标使用情况往往处于某种灰色地带。 最近&#xff0c;Rust基金会正在就更新的商标政策征求反馈…...

C++算法恢复训练之归并排序

归并排序&#xff08;Merge Sort&#xff09;是一种基于分治思想的排序算法&#xff0c;它将待排序数组分成两个子数组&#xff0c;然后对这两个子数组分别进行排序&#xff0c;最后将两个已排序的子数组合并成一个有序数组。归并排序是一种稳定的排序算法&#xff0c;具体体现…...

使用Process Explorer和Clumsy工具定位软件高CPU占用问题

目录 1、问题描述 2、使用Process Explorer初步找到CPU占用高的原因 3、使用Clumsy工具在公司内网环境复现了问题...

为何巴菲特和马斯克站在了一起?

股神巴菲特虽然非常传奇&#xff0c;但是马斯克对其并不感冒。马斯克曾经在一档电视节目中表示&#xff0c;实业才是王道&#xff0c;埋怨金融业抢走太多人才和精英&#xff0c;暗指巴菲特为年轻人做了错误示范。当然&#xff0c;巴菲特的投资非常厉害&#xff0c;但也有失手的…...

企业数字化转型全是坑?这几篇数字化转型成功案例,减少70%损失

这篇给大家整理了200企业数字化转型案例合集&#xff0c;涵盖了制造、建筑、教育、零售、互联网等10行业的大中小型企业数字化转型思路&#xff0c;希望对大家有所帮助。 案例全部整合在这篇文章中&#xff0c;点击即可查看>>数字化干货资料合集&#xff01; 01 首先&…...

13.Java面向对象----嵌套类

Java面向对象—嵌套类、内部类、匿名类 一、static静态 在《Java编程思想》有这样一段话&#xff1a;   “static方法就是没有this的方法。在static方法内部不能调用非静态方法&#xff0c;反过来是可以的。而且可以在没有创建任何对象的前提下&#xff0c;仅仅通过类本身来…...

Redis数据迁移过程,使用jedis客户端发送命令,需要注意string和byte类型的命令,如果使用的转换字符编码不一致,会导致丢数据

1.了解String与byte之间存在的字符编码映射规则&#xff08;java为例&#xff09; string与byte来回转换&#xff0c;需要指定一样字符编码规则 详细原因请参考&#xff1a;关于Java中bytes到String的转换-阿里云开发者社区 简单来说 &#xff08;1&#xff09;string和by…...

第六章 IA-32指令类型

IA-32指令类型1、传送指令1.1、常用传送指令1.1.1、通用数据传送指令1.2、传送指令执行过程2、定点算术运算指令2.1、常用定点运算指令2.2、加法运算的底层实现举例2.3、加法指令和乘法指令举例3、按位运算指令3.1、逻辑运算和移位运算3.2、按位运算指令举例4、控制转移指令4.1…...

基于BenchmarkSQL的Oracle数据库tpcc性能测试

基于BenchmarkSQL的Oracle数据库tpcc性能测试安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQLBenchmarkSQL props文件配置数据库用户配置BenchmarkSQL压测装载测试数据TPC-C压测&#xff08;固定事务数量&#xff09;TPC-C压测&#xff08;固定时长&#xff09;生成测试…...

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

背景 Dapr 是一个开源的分布式应用运行时&#xff0c;帮助开发者构建松耦合的分布式应用程序&#xff0c;具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台&#xff0c;提供了丰富的功能和工具&#xff0c;方便开发者管理和部署应用。Rainbond 和 Da…...

全国青少年信息素养大赛2023年python·选做题模拟五卷

目录 下载打印文档做题: 全国青少年电子信息智能创新大赛 python选做题模拟五卷 一、单选题 1. 对于数列3,8,11,15,17,19,25,30,44,采用“二分查找”法查找8,需要查找多少次?( ) A、5...

itop-3568开发板驱动学习笔记(18)tasklet 机制

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录tasklet 简介tasklet 结构体tasklet 初始化使能 tasklet失能 tasklettasklet 调度函数tasklet 取消调度函数tasklet 实验tasklet 简介 Tasklets 机制是linux中断处理机制中的软中断延迟机制。在linux中存在着…...

全国青少年电子信息智能创新大赛(复赛)python·模拟二卷

目录 编程题一 答案解析: 打印题目下载做题: 全国青少年电子信息智能创新大赛(复赛)python模拟二卷 编程题一 第一题:描述 输入两个整数,比较它们的大小。 输入 一行,包含两个整数x和y,中间用单个空格隔开。 0<= x<2^32,-2^31 <= y<2^31。 输出...

对标ChatGPT的开源中文方案

目录 前言 一、Meta发布大语言模型LLaMA 二、斯坦福基于 Meta 的 LLaMA 7B 模型微调出Alpaca 三、基于TencentPretrain训练中文LLaMA大规模语言模型 四、基于斯坦福Alpaca训练中文对话大模型BELLE 五、 清华开源项目ChatGLM中文对话模型 六、基于LLaMA的开源中文语言模型…...

9.Java面向对象----封装

Java面向对象—封装 面向对象简称 OO&#xff08;Object Oriented&#xff09;&#xff0c;20 世纪 80 年代以后&#xff0c;有了面向对象分析&#xff08;OOA&#xff09;、 面向对象设计&#xff08;OOD&#xff09;、面向对象程序设计&#xff08;OOP&#xff09;等新的系统…...

【react 全家桶】组合组件

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录09 【组合组件】1.包含关系2.特例关系问题…...

APT41 (Barium) 的演进:从游戏行业到供应链攻击的AI应用

前言 1. 技术背景 —— 这个技术在攻防体系中的位置 高级持续性威胁 (Advanced Persistent Threat, APT) 是网络攻防体系金字塔的顶端。它并非指某种单一技术&#xff0c;而是一个复杂的、有组织的、长期的网络攻击活动集合。在整个攻防图谱中&#xff0c;APT代表着最高级别的对…...

使用pycharm调试后端项目

本文主要解决终端工具与charm环境隔离问题&#xff0c;让终端虚拟环境与pycharm进行关联&#xff0c;简化pycharm的操作第一步 安装 UV 并创建虚拟环境&#xff08;uv工具安装步骤已经跳过&#xff0c;不知道怎么安装的找AI问&#xff09;确保系统中已安装 UV 工具。若需特定 P…...

# Trae IDE `settings.json` 配置详解与教学文档

Trae IDE settings.json 配置详解与教学文档 一、文档说明 本文档针对 Trae IDE 中 Java 开发核心配置文件 settings.json 进行逐字段解读,结合实际开发场景说明配置目的、作用及最佳实践,适配 Spring Boot + Maven + JDK21 技术栈。 二、配置文件整体作用 settings.json…...

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large 想试试最新的MogFace-large人脸检测模型&#xff0c;但手头没有现成的云GPU服务器&#xff1f;或者想先在本地环境里跑通流程&#xff0c;验证一下效果再上云&#xff1f;今天就来分享一个非常实用的方法&#xf…...

Vue-Vben-Admin主题定制实战指南:从原理到实现的深度探索

Vue-Vben-Admin主题定制实战指南&#xff1a;从原理到实现的深度探索 【免费下载链接】vue-vben-admin vbenjs/vue-vben-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统&#xff0c;支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统&#xff0c;可以方便…...

利用Charles实现请求与响应的动态修改:从基础到实战

1. Charles工具简介与基础配置 Charles是一款功能强大的网络抓包工具&#xff0c;它就像是你手机和电脑之间的"透明玻璃"&#xff0c;能让你清清楚楚地看到所有进出的网络请求。我第一次接触Charles是在调试一个电商APP的支付接口时&#xff0c;当时遇到一个诡异的bu…...

League-Toolkit启动故障系统性排查方案:从现象到根治的完整解决路径

League-Toolkit启动故障系统性排查方案&#xff1a;从现象到根治的完整解决路径 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 问…...

3大增强型功能体系:重新定义设计师工作方式

3大增强型功能体系&#xff1a;重新定义设计师工作方式 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在当今快节奏的设计行业中&#xff0c;效率就是竞争力。这款开源Illustrator…...

大多数开发者还以为2026年AI编码拼的是模型,其实竞争早已转向系统架构

最近刷到Qoder和几个大厂的分享&#xff0c;我瞬间意识到&#xff1a;AI编码的战场已经彻底变天了。 很多人还在卷模型参数、卷上下文长度&#xff0c;以为下一个SOTA模型出来就能让Agent“起飞”。但真实情况是——Stripe每周合并1300个完全由Agent写的PR&#xff0c;Ramp有30…...

脑电分析避坑指南:为什么你的PLV锁相值总等于1?希尔伯特变换与窄带滤波详解

脑电分析避坑指南&#xff1a;为什么你的PLV锁相值总等于1&#xff1f;希尔伯特变换与窄带滤波详解 在脑电信号分析领域&#xff0c;相位锁定值&#xff08;Phase Locking Value, PLV&#xff09;是衡量不同脑区神经振荡同步性的重要指标。但许多研究者在实际计算中常遇到一个令…...