【算法】平衡二叉树
难度:简单
题目
给定一个二叉树,判断它是否是 平衡二叉树
示例:
示例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
解题思路:
暴力解判断一棵二叉树是否是平衡二叉树,我们需要理解“平衡”的定义:对于树中的任意节点,它的左子树和右子树的高度差不超过1。这个问题可以通过自底向上递归的方式来解决,每个递归函数返回两个值:当前子树是否平衡以及该子树的高度。
- 定义递归函数:编写一个递归函数,该函数接收一个树节点作为参数。这个函数需要返回两个值:
○ 一个布尔值,表示以该节点为根的子树是否平衡。
○ 一个整数,表示以该节点为根的子树的高度。 - 基本情况:
○ 如果节点为空,可以直接返回“平衡”状态(true)以及高度0,因为空树被认为是平衡的。 - 递归计算:
○ 对当前节点的左子树进行递归调用,得到左子树是否平衡及高度。
○ 对当前节点的右子树进行递归调用,得到右子树是否平衡及高度。 - 判断并返回:
○ 根据左、右子树的平衡状态和高度,判断当前节点的子树是否平衡:
■ 如果左、右子树都平衡且它们的高度差不超过1,则当前子树平衡。
■ 否则,当前子树不平衡。
○ 计算当前子树的高度,即左右子树高度中的较大者加1。 - 主函数调用:从根节点开始调用递归函数,仅关心返回的平衡状态,忽略高度信息。
JavaScript实现:
// 定义二叉树节点
class TreeNode {constructor(val, left = null, right = null) {this.val = val;this.left = left;this.right = right;}
}// 判断是否平衡的递归函数
function isBalancedHelper(node) {if (!node) return [true, 0]; // 空树,高度为0,平衡const [leftBalanced, leftHeight] = isBalancedHelper(node.left);const [rightBalanced, rightHeight] = isBalancedHelper(node.right);// 当前节点是否平衡的判断依据const balanced = leftBalanced && rightBalanced && Math.abs(leftHeight - rightHeight) <= 1;// 当前子树的高度const height = Math.max(leftHeight, rightHeight) + 1;return [balanced, height];
}// 主函数
function isBalanced(root) {return isBalancedHelper(root)[0]; // 只关心是否平衡的结果
}// 示例
//const root = new TreeNode(1,
// new TreeNode(2,
// new TreeNode(3),
// new TreeNode(4)),
// new TreeNode(2));
// console.log(isBalanced(root)); // 输出: false,因为右子树的左子树高度为2,导致不平衡
这段代码首先定义了二叉树节点的构造函数TreeNode,然后定义了辅助递归函数isBalancedHelper来判断子树的平衡状态和计算高度,最后是主函数isBalanced来调用辅助函数并返回是否平衡的结果。
相关文章:
![](https://i-blog.csdnimg.cn/direct/ef4fce99b88e43aaa9a586790a7fae6c.png#pic_center)
【算法】平衡二叉树
难度:简单 题目 给定一个二叉树,判断它是否是 平衡二叉树 示例: 示例1: 输入:root [3,9,20,null,null,15,7] 输出:true 示例2: 输入:root [1,2,2,3,3,null,null,4,4] 输出&…...
![](https://i-blog.csdnimg.cn/direct/5e4c33fadf8b47da99b973e3108fa5bf.png)
五、 计算机网络(考点篇)
1 网络概述和模型 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、管理集中化、实现分布式处理、负载均衡。 网络性能指标:速率、带宽(频带宽度或传送线路…...
![](https://www.ngui.cc/images/no-images.jpg)
如何解决数据分析问题:IPython与Pandas结合
如何解决数据分析问题:IPython与Pandas结合 数据分析是现代科学研究、商业决策和技术开发中的一个重要环节。IPython和Pandas是两个强大的工具,它们可以大大简化和加速数据分析的过程。本文将为初学者详细介绍如何结合使用IPython和Pandas来解决数据分析…...
![](https://i-blog.csdnimg.cn/direct/53cdfc2ea70a412ca9a0673f904534c9.png)
如何在 Microsoft Edge 上使用开发人员工具
Microsoft Edge 提供了一套强大的开发人员工具,可帮助 Web 开发人员检查、调试和优化他们的网站或 Web 应用程序。 无论您是经验丰富的 Web 开发人员还是刚刚起步,了解如何有效地使用这些工具都可以对开发过程产生重大影响。 在本文中,我们…...
![](https://i-blog.csdnimg.cn/direct/c509b81030014413b01bfb4e2e626e40.png)
《Linux系统编程篇》认识在linux上的文件 ——基础篇
前言 Linux系统编程的文件操作如同掌握了一把魔法钥匙,打开了无尽可能性的大门。在这个世界中,你需要了解文件描述符、文件权限、文件路径等基础知识,就像探险家需要了解地图和指南针一样。而了解这些基础知识,就像学会了魔法咒语…...
![](https://i-blog.csdnimg.cn/direct/ea4f6c69b89143ed9688bb02dbb76ba2.png)
Qt:22.鼠标相关事件(实例演示——鼠标进入/离开某控件的事件、鼠标按下事件、鼠标释放事件、鼠标双击事件)
目录 1.实例演示——鼠标进入/离开某控件的事件: 2.鼠标按下事件: 3.鼠标释放事件: 4.鼠标双击事件: 1.实例演示——鼠标进入/离开某控件的事件: 首先创建一个C类文件 Label,填写好要继承的父类 QLabe…...
![](https://i-blog.csdnimg.cn/direct/99bf491d80dd4e06a916e074fc08309c.png)
笔记 4 :linux 0.11 中继续分析 0 号进程创建一号进程的 fork () 函数
(27)本条目开始, 开始分析 copy_process () 函数,其又会调用别的函数,故先分析别的函数。 get_free_page () ; 先 介绍汇编指令 scasb : 以及 指令 sstosd :…...
![](https://i-blog.csdnimg.cn/direct/406b9599dd2d410e8b80b269caa132e5.png)
Vue3 引入Vanta.js使用
能搜到这篇文章 想必一定看过demo效果图了吧 示例 Vanta.js - Animated 3D Backgrounds For Your Website (vantajs.com) 1. 引入 在根目录 index.html中引入依赖 <script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r134/three.min.js"></sc…...
![](https://i-blog.csdnimg.cn/direct/bb254161b24742619559b81d71ab41ba.png)
LeetCode --- 134双周赛
题目 3206. 交替组 I 3207. 与敌人战斗后的最大分数 3208. 交替组 II 3209. 子数组按位与值为 K 的数目 一、交替组 I & II 题目中问环形数组中交替组的长度为3的子数组个数,主要的问题在于它是环形的,我们要考虑首尾相接的情况,如何…...
![](https://i-blog.csdnimg.cn/direct/27785dc454a547f796bccc545eef984d.png)
快速读出linux 内核中全局变量
查问题时发现全局变量能读出来会提高效率,于是考虑从怎么读出内核态的全局变量,脚本如下 f open("/proc/kcore", rb) f.seek(4) # skip magic assert f.read(1) b\x02 # 64 位def read_number(bytes):return int.from_bytes(bytes, little,…...
![](https://i-blog.csdnimg.cn/direct/58693513d93541a8a699fad79fb239a5.png)
postman录制设置
一、前言: postman是一个很好接口调试或是测试工具,简单方便,不需要很复杂的流程与技术,并且也具备录制条件。对于接口不了解,没有明确对应的说明,但又想通过接口进行一些测试使用其录制是一个不错的办…...
![](https://i-blog.csdnimg.cn/direct/bc19d7fded664ca092f00ea8bbdc4cc9.png)
redis消息队列
redis 的list类型实现消息队列: list结构实现的优缺点: 2、pubsub模式(消息发布订阅)实现消息队列 pubsub的优缺点: 命令行实现: pub:第一次发送有两个接收,第二个只有一个接收 sub接收&#x…...
![](https://i-blog.csdnimg.cn/direct/1a498df91d0a401aa9e1f82c3ba02d41.png)
Linux vim的使用(一键安装则好用的插件_forcpp),gcc的常见编译链接操作
vim 在Linux系统上vim是个功能还比较完善的软件。但是没装插件的vim用着还是挺难受的,所以我们直接上一款插件。 我们只需要在Linux上执行这个命令就能安装(bite提供的) curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh …...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CaDMIN%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20240713150844844.png&pos_id=img-UDcJW3Ot-1720872886067)
css基础(1)
CSS CCS Syntax CSS 规则由选择器和声明块组成。 CSS选择器 CSS选择器用于查找想要设置样式的HTML元素 一般选择器分为五类 Simple selectors (select elements based on name, id, class) 简单选择器(根据名称、id、类选择元素) //页面上的所有 …...
![](https://i-blog.csdnimg.cn/direct/e3f247a8bb38412abdf00863f2ecc6c0.png)
高并发线程池设计Nginx线程池源码剖析
为什么我们需要线程池?Why? 省流: 为了解决: 1.访问磁盘速度慢 2.等待设备工作 3..... 我们使用多线程技术,在IO繁忙的时候优先处理别的任务 为了解决多线程的缺陷: 1.创建、销毁线程时间消耗大 2.创建线程太多使系统资源不足或者线程频繁切换…...
![](https://i-blog.csdnimg.cn/direct/94ee638781e147bb8884b20c0c3be4ee.jpeg)
SEO:6个避免被搜索引擎惩罚的策略-华媒舍
在当今数字时代,搜索引擎成为了绝大多数人获取信息和产品的首选工具。为了在搜索结果中获得良好的排名,许多网站采用了各种优化策略。有些策略可能会适得其反,引发搜索引擎的惩罚。以下是彭博社发稿推广的6个避免被搜索引擎惩罚的策略。 1. 内…...
STM32之六:SysTick系统滴答定时器
目录 1. SysTick简介 2. 时钟来源 3. SysTick寄存器 3.1 CTRL—SysTick控制及状态寄存器 3.2 RELOAD—SysTick重装载数值寄存器 3.3 CURRENT—SysTick当前数值寄存器 4. systick系统定时器配置 5. 延时函数实现 5.1 延时函数编写步骤 5.2 微秒级延时函数delay_us 5.…...
![](https://i-blog.csdnimg.cn/direct/02508da0900d4be2bd02fee89661be00.png)
全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)
1. 项目概述 本文详细介绍了一个基于STM32微控制器和AWS IoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点: 使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266 W…...
![](https://i-blog.csdnimg.cn/direct/e7a5562ac8684b8d9e890816a8b3d746.png)
WPF学习(3) -- 控件模板
一、操作过程 二、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressio…...
![](https://www.ngui.cc/images/no-images.jpg)
Netty Websocket SpringBoot Starter
netty websocket starter Quick Start Demo 项目 添加依赖 <!--添加源--> <repository><id>github</id><url>https://maven.pkg.github.com</url><snapshots><enabled>true</enabled></snapshots> </reposit…...
![](https://i-blog.csdnimg.cn/direct/798118bb4fda4ba9a34ee230cfad36a4.png)
数据结构(4.2)——朴素模式匹配算法
字符串模式匹配 在主串中找到模式串相同的子串,并返回其所在的位置。 子串和模式串的区别 子串:主串的一部分,一定存在 模式串:不一定能在主串中找到 字符串模式匹配 朴素模式匹配算法 主串长度为n,模式串长度为…...
![](https://www.ngui.cc/images/no-images.jpg)
git切换远程仓库地址
git 更换远程仓库地址三种方法总结 一、前言 由于之前项目管理使用私服的 gitlab ,现在换成了Gitea,需要修改远端仓库地址。 二、环境 windows 10git version 2.34.0.windows.1 三、帮助文档 GitHub文档 四、三种修改方法 方法一:不删除远程仓…...
![](https://www.ngui.cc/images/no-images.jpg)
同步与异步:.NET 中的 Task.WaitAll 和 Task.WhenAll
在 C# 中,异步编程通常涉及同时运行多个任务。处理多个任务的两种常见方法是 Task.WaitAll 和 Task.WhenAll。虽然它们看起来很相似,但它们的用途不同,并且用于不同的场景。本文探讨了 Task.WaitAll 和 Task.WhenAll 之间的区别,并…...
![](https://i-blog.csdnimg.cn/direct/bcc6b52baadc45a69bdf8c0afdd4c49b.png)
在Linux系统实现瑞芯微RK3588部署rknntoolkit2进行模型转换
一、首先要先安装一个虚拟的环境 安装Miniconda包 Miniconda的官网链接:Minidonda官网 下载好放在要操作的linux系统,我用的是远程服务器的linux系统,我放在whl这个文件夹里面,这个文件夹是我自己创建的 运行安装 安装的操作都是yes就可以了 检查是否安装成功,输入下面…...
![](https://i-blog.csdnimg.cn/direct/e8f2813d3f6a4f638c0d02689e7ff7e7.png)
【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用
目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…...
![](https://i-blog.csdnimg.cn/direct/5b3ea622034a43608159cf0925ccd080.png)
Jenkins中Node节点与构建任务
目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…...
![](https://i-blog.csdnimg.cn/direct/c46a1c2c9bce4af9adb9e84a2a170417.png)
Leetcode3200. 三角形的最大高度
Every day a Leetcode 题目来源:3200. 三角形的最大高度 解法1:模拟 枚举第一行是红色还是蓝色,再按题意模拟即可。 代码: /** lc appleetcode.cn id3200 langcpp** [3200] 三角形的最大高度*/// lc codestart class Solutio…...
![](https://www.ngui.cc/images/no-images.jpg)
docker运行nginx挂载前端html页面步骤
1.常用docker命令 1.docker ps -a 查看所有容器 2.docker ps查看存活的容器 3.docker rm 删除容器 4.docker stop 停止容器运行 5.docker logs 容器id 查看容器日志 6.docker images 查看镜像 7.docker rmi 删除镜像 8.docker exec nginx nginx -s reload 重新加载conf文件…...
![](https://www.ngui.cc/images/no-images.jpg)
kafka部署以及常用命令详细总结
1环境准备 1.1ip规划 ip: 192.168.1.200 1.2配置主机名 #设置主机名 hostnamectl set-hostname node11.3配置hosts [rootnode1 ~]# cat >> /etc/hosts << EOF192.168.1.200 node1 EOF2部署 2.1安装包准备 将以下安装包从官网下载到本地 jdk-8u371-linux-x6…...
![](https://i-blog.csdnimg.cn/direct/b8d41ffc14f449ab91571c6460aa5ca0.png)
代码随想录算法训练营第29天|LeetCode 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
1. LeetCode 134. 加油站 题目链接:https://leetcode.cn/problems/gas-station/description/ 文章链接:https://programmercarl.com/0134.加油站.html 视频链接:https://www.bilibili.com/video/BV1jA411r7WX 思路: 贪心ÿ…...
![](https://img-blog.csdnimg.cn/20201021191446142.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODE5MTIxMQ==,size_16,color_FFFFFF,t_70#pic_center)
wordpress s7/cps游戏推广平台
文章目录前言一、MHA 概述1.1、MHA 是什么1.2、MHA 的组成1.3、MHA 的特点二、MHA 实验2.1、案例环境2.2、拓扑图2.3、实验目的2.4、实验过程2.4.1、主从复制调整2.4.2、安装 MHA 软件2.4.3、配置节点间SSH面交互无密码认证2.4.4、配置 MHA2.4.5、测试 ssh 无密码认证2.4.6、测…...
![](https://img-blog.csdnimg.cn/20191031173431340.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhcG9uaQ==,size_16,color_FFFFFF,t_70)
wordpress主题怎么设置tdk/优化公司哪家好
IDEA2019演示给zjsb项目打成war包。 IDEA给Web项目打成war包 1、点击左上角的【File】->【Project Structure】菜单(或使用ShiftCtrlAltS快捷键),打开【Project Structure】窗口。如下图: 2、在【ProjectStructure】中选择左侧…...
![](/images/no-images.jpg)
中小企业做网站贷款/如何在互联网推广自己的产品
变量的命名要注意,不要使用- ,而推荐使用_ 变量可以通过group来定义,也就是定义一些变量给整个组使用,例如: group_vars/ ├── all └── dbservers 对应的就是我们hosts中定义的组 当然,也可以在playbook中直接…...
![](https://img-blog.csdnimg.cn/img_convert/99038eeabe503b4d8010d753040fad35.png)
wordpress comment_author_link/seo整站优化什么价格
.properties 配置文件大家应该都很熟悉,键值对嘛,.yml 配置文件栈长也是从 Spring Boot 开始了解到的。那么,这两种格式的配置文件到底有哪些区别呢?哪个更好?能不能替换代替?今天,栈长就来解开…...
![](http://upload-images.jianshu.io/upload_images/677071-98aaf8d078a04c1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
厦门seo网站建设费用/东营seo网站推广
解释 更新布局总会重新触发layoutSubviews方法。 layoutSubviews 继承于UIView的子类重写,进行布局更新,刷新视图。如果某个视图自身的bounds或者子视图的bounds发生改变,那么这个方法会在当前runloop结束的时候被调用。为什么不是立即调用…...
![](https://img-blog.csdnimg.cn/20210717184204248.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Nhb2xpMjAxMzE0,size_16,color_FFFFFF,t_70)
伪原创网站/汽车推广软文
大家好,我是锋哥,今天一个老朋友找我聊聊天,说最近几年事业稳定,准备换个50万的车。 我推荐他黑色奔驰GLC 300 这个学员比我厉害,我现在开的还是小英朗,还是手动的,哈哈!不过等过几…...