LeetCode-110. 平衡二叉树

news2024/9/21 15:25:04

目录

    • 题目分析
    • 递归法
    • 题外话

题目来源
110. 平衡二叉树

题目分析

平很二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
二叉树节点的深度和二叉树节点的高度
在这里插入图片描述

递归法

递归三步曲

  • 1.明确递归函数的参数和返回值

参数:当前传入节点。
返回值:以当前传入节点为根节点的树的高度。
那么如何标记左右子树是否差值大于1呢?
如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。
所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。
代码如下:

int getHeight(TreeNode root)
  • 2.明确终止条件

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

        if(root == null){
            return 0;
        }
  • 3.明确单层递归的逻辑

如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。
分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。
代码如下:

        int leftHeight = getHeight(root.left);   //左
        if(leftHeight == -1){
            return -1;
        }
        int rightHeight = getHeight(root.right);   //右
        if(leftHeight == -1){
            return -1;
        }
        int result;
        if(Math.abs(leftHeight-rightHeight)>1){        //中
            return -1;
        }else{
            result = Math.max(leftHeight,rightHeight)+1;
        }
        return result;

整体递归代码如下:

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) != -1;
    }

    public static int getHeight(TreeNode root){
        if(root == null){
            return 0;
        }
        int leftHeight = getHeight(root.left);   //左
        if(leftHeight == -1){
            return -1;
        }
        int rightHeight = getHeight(root.right);   //右
        if(rightHeight == -1){
            return -1;
        }
        int result;
        if(Math.abs(leftHeight-rightHeight)>1){        //中
            return -1;
        }else{
            result = Math.max(leftHeight,rightHeight)+1;
        }
        return result;
    }
}

在这里插入图片描述

题外话

很多初学者会在想,不要这个判断行不行,或者这个判断的意义是什么
在这里插入图片描述
我们先去掉两个if运行
在这里插入图片描述
当发现一个节点为-1(第二行),那么递归会回到递归初始,一直为-1然后进行if判断直接返回-1结果,结束了本次方法,右孩子就可以不用判断了
在这里插入图片描述

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

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

相关文章

【C++设计模式】学习笔记(5):Decorator 装饰模式

目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…

2023年1月语音合成(TTS)和语音识别(ASR)论文月报

论文统计每月更新一次,主要跟踪语音合成和语音识别的发展状况(很多文章都是在会议后才发出,但不影响统计。统计过程难免存在疏漏,因此统计结果仅供参考。所有文章语音合成领域统计列表请访问http://yqli.tech/page/tts_paper.html&#xff0c…

肝一波,体验人工智能对话

一、肝一波,体验真爽 废话不多少,小码哥直接提大家感兴趣的问题,截图分享给大家。 问题一:如何在一年内赚到100万元 答: 一、赚钱的方式 开公司:在一年内开拓新业务模式,寻求投资&#xff…

Vue学习笔记3

Vue学习笔记31.1 指针1.2 指令补充&nextTick2.1 Vue-cli2.1.1 Vue-cli创建项目2.1.2 启动流程&入口文件2.1.3 eslint修复2.1.4 单文件组件-注册2.1.5 单文件组件-通信2.1.6 单文件组件-生命周期2.1.7单文件组件-指令与过滤器2.1.8 反向代理&别名反向代理需要在vue.…

二叉树进阶--二叉搜索树

目录 1.二叉搜索树 1.1 二叉搜索树概念 1.2 二叉搜索树操作 1.3 二叉搜索树的实现 1.4 二叉搜索树的应用 1.5 二叉搜索树的性能分析 2.二叉树进阶经典题: 1.二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,…

144. 二叉树的前序遍历

144. 二叉树的前序遍历 Java代码&#xff1a;递归 public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();preOrder(root, res);return res; } private void preOrder(TreeNode root, List<Integer> res) {i…

【沐风老师】3DMAX几何投影插件Geometry Projection使用详解

【几何投影插件】 描述 3DMAX几何投影插件Geometry Projection&#xff0c;将一个或多个对象或它的顶点选择沿全局或局部 x、y 或 z 轴投影到另一个对象上。 适用版本 3dMax2013或更高版本 安装设置 插件的安装非常简单&#xff0c;解压后把插件脚本 “geometry_projectio…

SmartSoftHelp 数据库优化辅助软件

SmartSoftHelp 数据库高并发优化&#xff0c;数据库连接字符串优化&#xff0c;SQL耗时优化&#xff0c;SQL格式化&#xff0c;美化&#xff1f; 这些问题你都知道&#xff1f; 这不仅仅是一个软件&#xff0c;而是很多种解决方案&#xff01; 支持Netframework ,netcore后台…

移动设备安全管理基础指南

什么是移动安全管理 &#xff08;MSM&#xff09; 移动安全管理是指为保护企业中的移动设备和企业数据而采取的行动。这些操作可以进一步被归类为反应性的或主动的&#xff0c;基于该操作是在数据和设备被破坏之前还是之后执行的。除了管理移动设备外&#xff0c;大多数MDM解决…

验收测试分类

α测试 Alpha 是内测版本&#xff0c;即现在所说的CB。 此版本表示该软件仅仅是一个初步完成品, 通常只在软件开发者内部交流, 也有很少一部分发布给专业测试人员。 一般而言, 该版本软件的bug 较多, 普通用户最好不要安装。 β测试 Beta是公测版本&#xff0c;是对所有用户…

【算法】高精度

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;不能只会思路&#xff0c;必须落实到代码上&#x1f43e; 文章目录前言一、高精度加法二、高精度减法三、高精度乘法四、高精度除法前言 ​ 高精度即很大很大的数&#xff0c;超过了 long long 的范围&…

html标签手册

完整的HTML页面&#x1f4d1; ①基础标签&#x1f4d1;&#x1f4d1;&#x1f4d1; HTML <!DOCTYPE> 声明 !DOCTYPE声明必须是 HTML 文档的第一行&#xff0c;位于 html标签之前。 !DOCTYPE 声明不是 HTML 标签&#xff1b;它是指示 web 浏览器关于页面使用哪个 HTML 版…

硬件设计 之 CAN通信-DSView逻辑分析仪使用-CAN波形测试

CAN总线讲解 1.基本概念&#xff1a; **CAN&#xff0c;Controller Area Network&#xff0c;控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线。 ** 2.CAN总线电平&#xff1a; can总线采用差分电压传输数据&#xff0c;分别是CANH和CA…

QCon演讲实录(上):多云环境下应用管理与交付实践

作者&#xff1a;阿里云大数据基础工程技术团队——郭耀星 大家上午好&#xff01;我是来自阿里云大数据基础工程技术团队的郭耀星&#xff0c;花名雪尧。今天我很高兴能够来到QCon&#xff0c;与大家分享我的经验和心得。在当前的多云环境中&#xff0c;作为运维支撑团队&…

GPDB中的HASH JOIN解析

GPDB中的HASH JOIN机制Hash Join是利用hash函数来实现和加速数据库中JOIN操作的一类算法。主要优势是hash函数可以只通过一次运算就将键值映射到固定大小的hash值&#xff0c;仅用作等值join中。由于HASH JOIN的算法复杂度在平均情况下是O(n)&#xff0c;所以通常在大规模数据时…

【K3s】第15篇 使用containerd容器部署k3s集群

目录 1、文件准备 2、安装master节点 3、安装agent节点 4、查看详情信息 5、遇到问题 1、文件准备 安装docker yum install -y dockersystemctl status docker 增加docker国内镜像源 vi /etc/docker/daemon.json 添加内容为&#xff1a; { "registry-mirrors":…

MySQL:为什么说应该优先选择普通索引,尽量避免使用唯一索引

前言 在使用MySQL的过程中&#xff0c;随着表数据的逐渐增多&#xff0c;为了更快的查询我们需要的数据&#xff0c;我们会在表中建立不同类型的索引。 今天我们来聊一聊&#xff0c;普通索引和唯一索引的使用场景&#xff0c; 以及为什么说推荐大家优先使用普通索引&#xf…

面试题(二十四)数据结构与算法

9.1哈希 请谈一谈&#xff0c;hashCode() 和equals() 方法的重要性体现在什么地方&#xff1f; 考察点&#xff1a;JAVA哈希表 参考回答&#xff1a; Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引&#xff0c;当根据键获取值的时候也会用到这两个方法。…

【OJ】本土化

&#x1f4da;Description: 激动人心的时刻到了&#xff01;我们开发的记账软件即将在欧美地区发布&#xff0c;但我希望能把本土化工作做得更好。所谓的本土化可不仅仅是把软件界面语言翻译成英语&#xff0c;还要根据当地的习俗来调整软件的使用方法。 比如我国在书写数字…

【yolov5】首次尝试目标检测利用prompt

1、打开prompt 2、切换到pytorch所在环境 conda activate freezing我的环境名是freezing&#xff0c;这里根据自己环境名去激活切换 3、进入到yolov5项目所在路径 激活完环境后立即执行指令当然是无效的&#xff0c;首先要进入到你的项目目录 首先看一下自己的项目在那个位…