leetcode刷题日记:110. Balanced Binary Tree(平衡二叉树)

news2025/1/16 4:03:28

题目给了我们一个二叉树要让我们来判断这一个二叉树是不是平衡二叉树。
要想判断一棵树是不是平衡二叉树,我们得首先知道平衡二叉树的定义是什么,平衡二叉树指的是这样的树它的左子树的高度与右子树高度的差的绝对值不能超过1,而且它的左子树是一颗平衡二叉树,它的右子树也是一颗平衡二叉树。画出图示如下:
在这里插入图片描述
我们可以看出这一个二叉树的左子树是高度为3的一棵树,右子树为高度为1的一颗子树,所以这不是一颗平衡二叉树。
在这里插入图片描述
上面这一颗树虽然根结点的左右子树的高度相差0,但是其右子树不是平衡二叉树,所以这一颗树仍然不是平衡二叉树。
相信看到这了,你一定有所感觉,也就是说我们判断一颗二叉树不仅要知道该二叉树的左子树与右子树的高度差,还要求出左子树是否为二叉树右子树是否为平衡二叉树。我们要先知道左子树与右子树是否为平衡二叉树才能知道整棵树是否为平衡二叉树。而子树仍然是一颗二叉树,所以判断二叉树是否为平衡二叉树的方法仍然可以使用,这就涉及到了递归的问题。
那么递归的终止条件是什么?因为叶子结点的指针域为空,没有孩子了,当访问到为空的指针域时就该终止递归了,此时访问到的空指针域可以看作根结点为空的二叉树,该二叉树的高度为0,显然空二叉树是平衡二叉树。这样我们就知道了当访问到 r o o t = = N U L L root==NULL root==NULL时应该返回该子树高度为0,是平衡二叉树。
那么非终止条件下则应该返回什么呢?非终止条件下,该结点的高度应为两颗子树中高度较大的加1,这就是该子树的高度,知道子树的高度之后,我们还需要根据其左右子树的高度差判断这一项是否符合平衡二叉树的条件,所以我们要求出 − 1 ≤ 左子树高度 − 右子树高度 ≤ 1 -1\leq 左子树高度-右子树高度\leq 1 1左子树高度右子树高度1同时还要知道其左子树是否为平衡二叉树,右子树是否为平衡二叉树,
将上述命题符号化:
q : − 1 ≤ 左子树高度 − 右子树高度 ≤ 1 p : 左子树为平衡二叉树 s : 右子树为平衡二叉树 q:-1\leq 左子树高度-右子树高度\leq 1\\ p:左子树为平衡二叉树\\ s:右子树为平衡二叉树\\ q:1左子树高度右子树高度1p:左子树为平衡二叉树s:右子树为平衡二叉树
当这三项都满足时此树才为平衡二叉树,所以返回的应该是 p ∧ q ∧ s p\land q\land s pqs
有了上面的思路我们可以写出下面的代码:

bool isBalance(struct TreeNode * root, int *depth){
    int *left = (int *)malloc(sizeof(int));
    int *right = (int *)malloc(sizeof(int));
    bool l, r;
    if(root==NULL){
        (*depth) = 0;
        return true;
    }
    l = isBalance(root->left, left);
    r = isBalance(root->right, right);
    *depth = (*left)>(*right)?(*left):(*right);
    *depth = (*depth) + 1;
    int x = (*left)-*right;
    if(x>=-1&&x<=1){
        return true && l && r;
    }
    return false && l && r;
}
bool isBalanced(struct TreeNode* root) {
    int depth = 0;
    return isBalance(root, &depth);
}

运行结果如下:
在这里插入图片描述

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

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

相关文章

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 关键字默认按升序排序。要按降序排序结果&#xff0c;使用 DESC 关键字。 示例按名称按字母顺序排序结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"l…

gorm之项目实战-使用gen以及定义表间关系

gorm之项目实战 ER图 关系整理 一对一关系&#xff1a; User 和 UserLog&#xff1a; 一个用户对应一个用户日志&#xff0c;通过 User 模型的主键与 UserLog 模型的外键建立一对一关系。 一对多关系&#xff1a; User 和 Teacher&#xff1a; 一个用户可以对应多个老师&…

电路中模拟地和数字地的分割方法

电路中只要是地&#xff0c;最终都要接到一起&#xff0c;然后入大地。如果不接在一起就是“浮地”&#xff0c;存在压差&#xff0c;容易积累电荷&#xff0c;造成静电。 地是参考0电位&#xff0c;所有电压都是参考地得出的&#xff0c;地的标准一致&#xff0c;故各种地应短…

rasa train nlu详解:1.1-train_nlu()函数

本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子&#xff0c;主要详解介绍train_nlu()函数中变量的具体值。 一.rasa/model_training.py/train_nlu()函数   train_nlu()函数实现&#xff0c;如下所示&#xff1a; def train_nlu(config: Text,nlu_data: Op…

transformers安装避坑

1.4 下载rust编辑器 看到这里你肯定会疑惑了&#xff0c;我们不是要用python的吗&#xff1f; 这个我也不知道&#xff0c;你下了就对了&#xff0c;不然后面的transformers无法安装 因为是windows到官网选择推荐的下载方式https://www.rust-lang.org/tools/install。 执行文…

使用ResponseSelector实现校园招聘FAQ机器人

本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人&#xff0c;回答面试流程和面试结果查询的FAQ问题。FAQ机器人功能分为业务无关的功能和业务相关的功能2类。 一.data/nlu.yml文件   与普通意图相比&#xff0c;ResponseSelector训练数据中的意图采用group/intent格…

【Armstrong公理】【求闭包和候选码】【判断范式】

1. Armstrong公理 2.求闭包和候选码 3.判断范式

WebSphere Liberty 8.5.5.9 (二)

WebSphere Liberty 8.5.5.9 &#xff08;二&#xff09; encode and decode Pre WebSphere Liberty 8.5.5.9 xor and AES 提取 D:\wlp-webProfile7-java8-8.5.5.9\wlp\lib 下必要加解密包 com.ibm.ws.crypto.certificateutil_1.0.12.jar com.ibm.ws.crypto.passwordutil_1…

2023 年合成数据的用例和应用

合成数据&#xff0c;也称为人工生成的数据&#xff0c;为数据科学应用中经常遇到的问题&#xff08;例如数据隐私和小数据量&#xff09;提供了解决方案。我们列出了不同行业和部门/业务单位中合成数据的功能和最常见的用例。 合成数据支持哪些与行业无关的用例/功能&#xf…

浅谈高并发以及三大利器:缓存、限流和降级

引言 高并发背景 互联网行业迅速发展&#xff0c;用户量剧增&#xff0c;系统面临巨大的并发请求压力。 软件系统有三个追求&#xff1a;高性能、高并发、高可用&#xff0c;俗称三高。三者既有区别也有联系&#xff0c;门门道道很多&#xff0c;全面讨论需要三天三夜&#…

Install Nginx in Linux

Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 1.yum 安装 nginx [rootVM-8-7-centos nginx]# yum install -y nginx Loaded plugins: fastestmirror, lang…

移动端模型部署框架

移动端模型部署框架 1. MNN整体特点轻量性通用性高性能易用性架构设计主体工具致谢移动端模型部署框架 1. MNN https://www.yuque.com/mnn/cn/about MNN是全平台轻量级高性能深度学习引擎,广泛支持了阿里巴巴在计算机视觉、语音识别技术、自然语言处理等领域的70多个AI应用…

vue3 文字轮播打字机效果

实现效果 1.安装依赖 npm install duskmoon/vue3-typed-js 2.html <div class"title_left_1"><Typed :options"options" class"typedClass"><div class"typing"></div></Typed> </div> 3.ts…

基于单片机的空调智能控制器的设计

**单片机设计介绍&#xff0c;基于单片机的空调智能控制器的设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的空调智能控制器需要具备输入输出端口、定时器、计数器等模块&#xff0c;以便对空调进行精确控制。下…

单词规律问题

给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…

Java学习 10.Java-数组习题

一、创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100 代码实现 public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < arr.length; i) {arr[i]i1;}System.out.println(Arrays.toString(arr));} 运行结果 二、改变…

僵尸进程问题如何处理

现象&#xff1a; 工作中遇到docker内有很多的僵尸进程&#xff0c;导致CPU过高&#xff0c;直接卡死。 原因&#xff1a; 每个进程都有一个唯一的标识&#xff0c;称为 pid&#xff0c;pid 是一个非负的整数值&#xff0c;使用 ps 命令可以查看其中 PID 是表示进程号。系统中…

开发知识点-Ant-Design-Vue

Ant-Design-Vue a-input a-input Vue组件 a-spin 加载中的效果 data字段 mounted钩子函数 Ant Design Vue 组件库 list-type“picture-card” 上传的图片作为卡片展示 name show-upload-list action :beforeUpload“handleBeforeUpload” :headers“customHeaders” :disabl…

公开数据集:灵长类动物多通道感觉运动皮层电生理学的研究

Nonhuman Primate Reaching with Multichannel Sensorimotor Cortex Electrophysiology. 1 公开数据集网址&#xff1a;https://zenodo.org/records/3854034 目录 General DescriptionPossible usesVariable namesDecoder ResultsVideosSupplementsContact InformationCitation…

数据结构与算法【二分查找】Java实现

需求&#xff1a;在有序数组 A 内&#xff0c;查找值target 如果找到返回索引如果找不到返回 -1 前提 给定一个内含 n 个元素的有序数组 A&#xff0c;一个待查值 target 1 设置 i0&#xff0c;jn-1 2 如果 i \gt j&#xff0c;结束查找&#xff0c;没找到 3 设置 m (…