【Day-28慢就是快】代码随想录-二叉树-平衡二叉树

news2024/12/23 23:31:22

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

思路

求深度可以从上到下去查 所以需要前序遍历(中左右)

而高度只能从下到上去查,所以只能后序遍历(左右中)

递归法

1. 递归参数和返回值

参数:当前传入节点,返回值:以当前传入节点为根节点的树的高度

如何标记左右子树差值是否大于1?

若当前传入节点为根节点的二叉树不是平衡二叉树,返回高度没有意义。

定义返回-1表明已经不是平衡二叉树。

int getHeight(TreeNode* node)

2. 终止条件

递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0

if(node == nullptr) return 0;

3. 单层递归逻辑

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。

int leftHeight = getHeight(node->left);
int rightHeight = getHeight(node->right);
if(leftHeight == -1) return -1;
if(rightHeight == -1) return -1;

return abs(leftHeight-rightHeight)>1?-1:1+max(leftHeight, rightHeight);

整体代码:

class Solution {
public:
    int getHeight(TreeNode* node){
        if(node == nullptr) return 0;
        int leftHeight = getHeight(node->left);
        int rightHeight = getHeight(node->right);
        if(leftHeight == -1) return -1;
        if(rightHeight == -1) return -1;

        return abs(leftHeight-rightHeight)>1?-1:1+max(leftHeight, rightHeight);
    }
    bool isBalanced(TreeNode* root) {
        return getHeight(root) == -1 ? false : true;
    }
};

迭代法

在求二叉树的最大深度中我们可以使用层序遍历来求深度,但是就不能直接用层序遍历来求高度了,这就体现出求高度和求深度的不同。

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

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

相关文章

pmp和软件高项哪个含金量高?

人们常将PMP和高项放在一起比较,因为这两种证书都适用于项目经理职位,它们有高达60%的知识点重合度。在决定考哪一种证书之前,人们常常会感到困惑。 下面看一下pmp和软考高项的差异。 发证机构不同 PMP(Project Management Professional)是…

【VL tracking】Towards Unified Token Learning for Vision-Language Tracking

不知道什么原因学校认证账号进不去,下载不了最新的PDF 广西师范大学 | 国科大 | 厦大 代码开源 zhihu指路👉【VL tracking】MMTrack阅读 问题 一方面,传统的VL tracking方法需要昂贵的先验知识。例如,一些tracker是专门用于bou…

单片机简介

目录 1、单片机 2、CISC和RISC 3、 冯诺依曼结构和哈佛结构​编辑 1、单片机 单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片 ------------------------------------------------------------ 电脑&#xff1a; <--------> …

Redis从基础到进阶篇(三)----架构原理与集群演变

目录 一、缓存淘汰策略 1.1 LRU原理 1.2 案例分析 1.3 Redis缓存淘汰策略 1.3.1 设置最⼤缓存 1.3.2 淘汰策略 二、Redis事务 2.1 Redis事务典型应⽤—Redis乐观锁 2.2 Redis事务介绍 2.3 事务命令 2.3.1 MULTI 2.3.2 EXEC 2.3.3 DISCARD 2.3.4 WATCH 2.3.5 UNW…

Cesium 上展示点的坐标

文章目录 需求一需求分析 需求二需求分析 需求一 需求 Cesium 中绘制点并在点上添加该点的坐标 分析 在Cesium中&#xff0c;可以使用以下代码来显示指定点的坐标&#xff1a; //定义点的坐标 var position Cesium.Cartesian3.fromDegrees(longitude, latitude, height)…

QML配置启用 QML编译

简述 常规情况下 QML 是解释执行的&#xff0c;为了加快启动速度&#xff0c;官方开发了 QML 编译器&#xff0c;支持编译到 C。 用法 在 pro 文件添加配置,使其生效 CONFIG qtquickcompiler添加后可以看到编译的中间文件有变化&#xff0c;上边是未配置编译 QML&#xff…

从出版到金融:为何现代行业都选择“爱校对”?

在快速发展的数字时代&#xff0c;无论是企业内部的邮件、宣传手册&#xff0c;还是专业的金融报告和出版物&#xff0c;准确无误的文字成为成功的关键。那么&#xff0c;面对山量的文档&#xff0c;如何确保每一句话都字正腔圆、无误导性&#xff1f;答案可能比你想象的还要简…

视频号发农村怀旧治愈系短视频月入5K+,一部手机在家就能搞的副业项目

视频号大家都熟悉&#xff0c;治愈系短视频有人可能也见到过&#xff0c;只是可能没有人想过发发视频就能搞钱&#xff0c;尤其是在视频号里。其实这个项目不仅仅可以视频号做&#xff0c;抖音、快手、小红书都可以同步做&#xff0c;而且都有收益。 先给大家看看案例&#xf…

科技云报道:AI大模型终于走到了数据争夺战

科技云报道原创。 当前&#xff0c;大模型正处在产业落地前期&#xff0c;高质量的数据&#xff0c;是大模型实现产业化的关键要素。 最近&#xff0c;一项来自Epoch AI Research团队的研究抛出了一个残酷的事实&#xff1a;模型还要继续做大&#xff0c;数据却不够用了。 …

Vue 2 nextTick方法|异步更新|事件循环

1 nextTick的用处 vm.$netTick的作用是将回调延迟到下次DOM更新周期之后执行。 它接受一个回调函数作为参数。 其实&#xff0c;在我们更新数据状态后&#xff0c;是不会立马渲染的&#xff0c;你不能即刻获取到新的DOM&#xff1a; <!DOCTYPE html> <html><…

vscode+esp-idf 搭建esp32开发环境,编译信息中文乱码

1.修改波特率 2.C:\Users\Administrator\.vscode\extensions\vsciot-vscode.vscode-arduino-0.6.0-win32-x64\out\src\common 打开文件 util.js 屏蔽掉这部分的代码 、

献给前端研发同学的福利!性能诊断神器——Chrome Performance insight!

Performance insight概述 Performance insight是chrome Chrome DevTools中的自带工具&#xff08;Chrome102 版本发布&#xff09;&#xff0c;目前还是在chrome DevTool中启动即可&#xff0c;如下图所示&#xff1a;我们可以模拟cpu&#xff0c;选择4x slowdown&#xff0c;…

大数据可视化大屏实战项目(8)史上最炫酷科技风销售额度展示大屏,适用于电子产品---HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)

大数据可视化大屏实战项目&#xff08;8&#xff09;史上最炫酷科技风销售额度展示大屏&#xff0c;适用于电子产品—HTMLCSSJS【源码在文末】&#xff08;可用于比赛项目或者作业参考中&#x1f415;&#x1f415;&#x1f415;&#xff09; 一&#xff0c;项目概览 ☞☞☞☞…

发生OOM时JVM会退出吗

程序是否退出和发生 OOM 无关 需要明确&#xff0c;程序是否退出和发生 OOM 无关&#xff0c;而和当前是否还有存活的非守护线程有关。 只要还有运行中的子线程&#xff0c;即使 main 线程结束或异常崩溃了&#xff0c;程序也不会停止。 public class TestThreadRun {privat…

管理类联考——逻辑——汇总篇——知识点突破——论证逻辑——论证模型

不同的模型对应的削弱、支持、假设。 归纳模型 模型识别 1.完全归纳 完全归纳指的就是所谓的穷举法&#xff0c;即通过某一类对象中的全部元素具备或者不具备某个性质&#xff0c;从而证明这一类对象都具备或者不具备某个性质。考试中一般不考察完全归纳&#xff0c;因此&am…

彻底了解 npm、cnpm、pnpm 、yarn几种包管理工具

npm、cnpm、pnpm 、yarn几种包管理工具 npmcnpmyarnpnpm四者的优缺点&#xff1a; npm npm 是 Node.js 自带的包管理器&#xff0c;平时通过 npm install 命令来安装各种 npm 包&#xff08;比如&#xff1a;npm install vue-router &#xff09;&#xff0c;就是通过这个包管…

基于OpenEuler的信创国产瘦客户机软件系统 DoraOS

DoraOS是一款瘦客户机系统软件&#xff0c;最新版本基于OpenEuler开发。可以将主机转化为专业的瘦客户机。目前支持x86架构的硬件。 软件下载地址为&#xff1a; https://www.doracloud.cn/downloads/32-cn.html 制作一张启动U盘&#xff0c;即可进行安装。 DoraOS的连接窗口…

3D数据导出工具HOOPS Publish:3D数据查看、生成标准PDF或HTML文档!

HOOPS中文网http://techsoft3d.evget.com/ 一、3D导出SDK HOOPS Publish是一款功能强大的SDK&#xff0c;可以创作丰富的工程数据并将模型文件导出为各种行业标准格式&#xff0c;包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:…

【UIPickerView案例04-随机点餐完善 Objective-C语言】

一、之前我们讲到哪里 1)首先,是搭建界面 2)然后呢,是加载数据 先把这个数据文件,拖进来,然后呢,设置它的代理对象、数据源对象 然后呢,在控制器里面,遵守对应的协议, 实现对应的方法 跟TableView的思路,一样一样的, 也是,把多少行返回 把多少组,返回 然后呢…

【python爬虫】12.建立你的爬虫大军

文章目录 前言协程是什么多协程的用法gevent库queue模块 拓展复习复习 前言 照旧来回顾上一关的知识点&#xff01;上一关我们学习如何将爬虫的结果发送邮件&#xff0c;和定时执行爬虫。 关于邮件&#xff0c;它是这样一种流程&#xff1a; 我们要用到的模块是smtplib和emai…