剑指offer55-II.平衡二叉树

news2024/11/16 19:43:32

 我这个方法比较笨,用的是用的是昨天写的求二叉树深度的方法,先定义dfs求二叉树深度的方法,再定义cur方法,比较左子树和右子树的深度,递归比较每一个子树的左子树和右子树的深度,一旦有一个不平衡就把flag改为false,最后返回flag。

class Solution {
    int height =0;
    boolean flag =true;
    public boolean isBalanced(TreeNode root) {
        if(root == null)return true;
        cur(root);
        return flag; 
    }
    private int dfs(TreeNode root){
        if(root == null) return 0;
        int lHeight = dfs(root.left);
        int rHeight = dfs(root.right);
        return  Math.max(lHeight, rHeight) + 1;
    }
    private void cur(TreeNode root){
        int leftHeight, rightHeight =0;
        if(root.left != null){
            leftHeight = dfs(root.left);
        }else{
            leftHeight = 0;
        }
        if(root.right != null){
            rightHeight = dfs(root.right);
        }else{
            rightHeight = 0;
        }
        if(rightHeight - leftHeight > 1 || leftHeight - rightHeight > 1){
            flag = false;
        }
        if(root.left != null)cur(root.left);
        if(root.right != null)cur(root.right);

    }

}

写完后我看了一下题解,题解也是用了两次递归,但是他的代码很简洁

class Solution {
    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        } else {
            return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
        }
    }

    public int height(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            return Math.max(height(root.left), height(root.right)) + 1;
        }
    }
}

第一次递归和我的差不多,主要是第二次递归简单,如果一棵树要做到是平衡的,那么左右子树的高度相差必须小于等于1,并且左子树是平衡的右子树也是平衡的。

题解还给了一种自底向上的方法,这个也好理解。

class Solution {
    public boolean isBalanced(TreeNode root) {
        return height(root) >= 0;
    }

    public int height(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftHeight = height(root.left);
        int rightHeight = height(root.right);
        if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) {
            return -1;
        } else {
            return Math.max(leftHeight, rightHeight) + 1;
        }
    }
}

这个方法和前面那个方法的求高度方法差不多,唯一改变的就是,如果一颗树的左子树和右子树的高度之差大于1或者他的左子树或右子树的高度是-1,那么这棵树的高度就是-1.这就会导致如果出现了左右子树相差大于1,那么这棵树和他的所有祖宗树的高度都是-1,也就是说最大的根树也是-1,主方法中调用这个方法直接返回树的高度是否大于等于0,如果是-1就是false,其他都是true。

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

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

相关文章

vue3使用Eharts案例

文章目录 安装Eharts代码演示最终效果 安装Eharts 官方快速上手地址 npm install echarts --save代码演示 <script setup> import {onMounted, ref} from "vue"; // import echarts from "echarts"; import * as echarts from echarts; const opt…

聊聊「画图」和工具

经常被问&#xff1a;图怎么画&#xff0c;用啥工具&#xff1f; 01 每次遇到这个问题&#xff0c;脑回路都有一丝丝欢乐的氛围&#xff1b; 并不是问题奇怪&#xff1b; 而是自己对于画图这件事上并不专业&#xff0c;就算是涉及工作上的制图&#xff0c;也没特地去看过任何…

交换机远程登录telnet、SSH、禁止非法用户访问实验

交换机远程登录实验 交换机远程登录实验一、配置Console口登录设备二、配置Telnet远程登录三、Stelnet&#xff08;SSH&#xff09;配置四、远程登录实际中的配置五、禁止非法用户远程登录 交换机远程登录实验 ———————————————————————————————…

解锁数字化转型利器:探秘常用低代码工具大揭秘!

随着数字化转型的深入推进&#xff0c;越来越多的企业开始采用低代码工具来加快应用程序的开发速度。在本文中&#xff0c;我们将介绍常用的低代码工具有哪些&#xff1f;以帮助企业了解并选择适合自己的工具。 1、Zoho Creator Zoho Creator是一款低代码开发平台&#xff0c;提…

Docker配置阿里镜像加速源,超详细

1、首先登入阿里云账号,点击 控制台    2、搜索框查找 容器镜像服务    3、点击 镜像加速器 ,选择对应的操作系统    4、复制加速地址,在系统中配置 默认路径 /etc/docker/daemon.json 5、重启Docker systemctl daemon-reload systemctl restart docker6、验证 当…

【数据结构与算法】力扣:对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 来源&#xff1a;…

Windows+IDEA+Nginx反向代理本机实现简单集群

先简单创建一个项目&#xff0c;可以是Maven也可以是Spring Initializr&#xff0c;如果是 Maven则需要自己配置启动类 按照目录路径创建controller类 package com.cloud.SR.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springfram…

mac intellij idea配置settings.xml报错解决

今天在配置环境的时候&#xff0c;发现在运行代码的时候不断报错提示maven没有能够成功地被sync&#xff0c;解决方法将以下三点解决了之后&#xff0c;程序最终跑起来了。 1.将maven的版本配置对&#xff0c;之前项目都用的maven-3.8.5这个版本&#xff0c;而我原先用的是mave…

MQ集群搭建

1.⾸先&#xff0c;克隆⼀台IP地址为192.168.230.132的虚拟机&#xff0c;然后参考章节的内 容&#xff0c;在该主机上安装RabbitMQ等环境。再加上之前的虚拟机&#xff0c;这样我们就准备好了两台Linux服 务器。 修改/etc/hosts映射⽂件。 vim /etc/hosts 3.两台Linux主机修改…

python识别登录验证码图片中字符

应用场景&#xff1a;在测试接口时&#xff0c;需要先自动执行登录接口&#xff0c;登录接口需要输入图片中的字符验证码。 实现的步骤主要有以下几步&#xff1a; 一、执行/captcha接口&#xff0c;从接口响应中提取图形验证码的base64编码值&#xff1b; 二、去掉base64编码…

STM32CubeIDE使用示例(STM32CubeMX+STM32CubeIDE+Gcc+JLINK+STM32G030C8T6)

本文简单记录下STM32CubeIDE的使用方法&#xff0c;整体的环境是STM32CubeMXSTM32CubeIDEGccJLINKSTM32G030C8T6&#xff0c;实现的简单测试功能是让STM32G030C8T6板子上的LED闪烁&#xff0c;以STM32G030C8T6 PB4 脚做LED 输出闪烁为例&#xff0c;外部8MHZ 晶振,系统主频64MH…

word 目录创建与提取

前言 word实际上一直在用&#xff0c;但是笔者在写文档都没关注目录的概念&#xff0c;实际上目录就是富文本或markdown编辑器的标题&#xff0c;可以起到跳转的作用。笔者的毕业论文的目录居然还是手打的。 目录创建 实际上word书写的时候就需要设置标题&#xff0c;最近的…

雅思单词量要达到多少才能达到要求?

对于刚开始备考雅思的同学来说&#xff0c;雅思单词是考好雅思的基础&#xff0c;雅思单词量要达到多少才能过关呢&#xff1f;下面为大家介绍一下雅思词汇量的要求。 一、雅思词汇量要求 雅思听力词汇 3000&#xff5e;5000左右&#xff0c;雅思听力是以场景展开的&#xff…

51单片机--定时器与按键控制流水灯模式

文章目录 定时器定时器的介绍定时器的作用定时器框图定时器的工作模式计数器原理图&#xff1a; 中断系统中断程序流程STC89C52的中断资源定时器和中断系统 定时器的相关寄存器TCONTMODTH与TL有关中断的寄存器 按键控制流水灯模式 定时器 定时器的介绍 51单片机上的定时器是一…

率先布局 RWA 赛道,PoseiSwap 成为最具先进性的 DEX

RWA 全称为现实资产通证化&#xff0c;比如股票、期货、美债甚至房产等传统资产。RWA 正在成为加密行业发展的一个全新叙事方向&#xff0c;除了传统商业巨头比如高盛、西门子等开始向该领域深入布局外&#xff0c;以 MakerDAO、Binance、Aave、Maple Finance 等为代表的 Web3 …

MySQL_2

目录 一、函数 1、字符串函数 2、数值函数 3、日期函数 4、流程控制函数 二、约束 1、概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2、目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 3、分类 4、外键约束 4…

命名管道使用示例

用命名管道实现client和server端进行通信 【实现步骤】 创建两个没有关系的进程--》编写client和server源文件&#xff0c;并分别编译成可执行程序&#xff1b;创建命名管道文件&#xff0c;用函数int mkfifo(const char *filename,mode_t mode);client端以写的方式打开管道文…

日志消息直接发送到kafka设计

背景&#xff1a; 日常工作中&#xff0c;我们一般都有需要分析业务日志的需求&#xff0c;有些业务日志记录了用户点击或者用户购买行为等有用的信息&#xff0c;所以我们一般都需要基于这些日志进行分析&#xff0c;本文我们就来看一下这种日志消息的流转图 技术方案&#…

阿里云ECS扩容硬盘空间及文件系统

一.通过阿里云控制台扩容硬盘 前往ECS实例详情页面的云盘页签。 登录ECS管理控制台。在左侧导航栏&#xff0c;选择实例与镜像 > 实例。在顶部菜单栏处&#xff0c;选择目标ECS实例所在地域。找到待扩容云盘所在的实例&#xff0c;单击实例ID。在实例详情页面&#xff0c;单…

一起来探索录音转文字哪个软件好用

在数字时代&#xff0c;录音转文字技术成为了一种不可或缺的工具&#xff0c;通过将语音内容转化为可编辑和搜索的文字&#xff0c;从而为我们带来了许多便利。那本文将探讨录音转文字的好处&#xff0c;并分享一些实际案例以及录音转文字软件。那么如果你还不知道录音转文字哪…