力扣每日一题110:平衡二叉树

news2024/9/23 11:28:38

题目

简单

给定一个二叉树,判断它是否是 

平衡二叉树

  

示例 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/5

通过次数

608.6K

提交次数

1M

通过率

58.4%

方法一:自顶向下的递归

二叉树是平衡二叉树的三个条件

1、左子树与右子树的高度差<=1

2、左子树是平衡二叉树

3、右子树是平衡二叉树

class Solution {
public:
    int height(TreeNode *root)
    {
        if(root==NULL) return 0;
        return max(height(root->left),height(root->right))+1;
    }
    bool isBalanced(TreeNode* root) {
        if(!root) return true;
        return abs(height(root->left)-height(root->right))<=1&&isBalanced(root->left)&&isBalanced(root->right);
    }
};

时间复杂度:O(n^{2})

空间复杂度:O(n)

方法二:自底向上的递归

方法一由于是自顶向下递归,因此对于同一个节点,函数 height 会被重复调用,导致时间复杂度较高。如果使用自底向上的做法,则对于每个节点,函数 height 只会被调用一次。

自底向上递归的做法类似于后序遍历,对于当前遍历到的节点,先递归地判断其左右子树是否平衡,再判断以当前节点为根的子树是否平衡。如果一棵子树是平衡的,则返回其高度(高度一定是非负整数),否则返回 −1。如果存在一棵子树不平衡,则整个二叉树一定不平衡。

官方题解

class Solution {
public:
    int height(TreeNode* root,bool &balanced) {
        if (root == NULL) {
            return 0;
        }
        int leftheight=height(root->left,balanced);
        int rightheight=height(root->right,balanced);
        if(abs(leftheight-rightheight)>1||!balanced){
            balanced=false;
            return -1;
        }
        return max(leftheight,rightheight)+1;
    }

    bool isBalanced(TreeNode* root) {
        bool balanced=true;
        return height(root,balanced) >= 0;
    }
};

时间复杂度:O(n)

空间复杂度:O(n)

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

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

相关文章

ComfyUI中的图像镜像反转(3种方式)

用下面的节点就可以让图片左右镜像反转&#xff0c;如下 如果想要上下翻转呢&#xff1f;用下面的节点&#xff0c;如下 这个节点不仅可以上下翻转&#xff0c;还可以左右翻转&#xff0c;把方向设置为水平就行&#xff0c;即设置为level&#xff0c;如下 或者用下面这个节点也…

动态规划——斐波那契数列模型:91.解码方法

文章目录 题目描述算法原理1.状态表示2.状态转移方程3.初始化⽅法⼀&#xff08;直接初始化&#xff09;⽅法⼆&#xff08;添加辅助位置初始化&#xff09; 4.填表顺序5.返回值 代码实现C优化Java优化 题目描述 题目链接&#xff1a;91.解码方法 算法原理 类似于斐波那契…

Elasticsearch初步认识

Elasticsearch初步认识 ES概述基本概念正向索引和倒排索引IK分词器ik_smart最少切分ik_max_word为最细粒度划分 ES索引库基本操作对索引库操作对文档操作 ES概述 Elasticsearch&#xff0c;简称为 ES&#xff0c;是一款非常强大的开源的高扩展的分布式全文检索引擎&#xff0c…

Linux基础之makefile/make

目录 一、背景 二、makefile和make的讲解 2.1 使用方法 2.2 伪目标文件 2.3 文件的属性以及属性的更新 2.4 makefile的自动推导 一、背景 这里会提及为什么要使用makefile和make&#xff0c;以及他们是什么和作用。 会不会写makefile&#xff0c;从一个侧面说明了一个人是…

JS基础:输出信息的5种方式详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

基于LLama3、Langchain,Chroma 构建RAG

概要&#xff1a; 使用Llama3 Langchain和ChromaDB创建一个检索增强生成&#xff08;RAG&#xff09;系统。这将允许我们询问有关我们的文档&#xff08;未包含在训练数据中&#xff09;的问题&#xff0c;而无需对大型语言模型&#xff08;LLM&#xff09;进行微调。在使用RA…

【企业动态】东胜物联正式加入EnOcean联盟,携手为智慧楼宇及能源管理提供更稳定的硬件解决方案

2024年4月&#xff0c;东胜物联&#xff08;Dusun&#xff09;宣布正式加入EnOcean联盟。EnOcean联盟是一个由来自建筑行业的400多家公司组成的全球性组织。它以EnOcean无线标准&#xff08;ISO/IEC 14543-3-10/11&#xff09;为基础&#xff0c;为可持续建筑自动化建立了创新的…

短剧APP开发:百亿短剧市场规模下的收益密码

短剧进入到大众的视野中&#xff0c;成为影视新行业&#xff0c;成为了中老年人茶余饭后的休闲方式&#xff0c;也成为了年轻人的“电子榨菜”。短剧时长短、节奏快&#xff0c;观众可以在短时间内看完一部剧&#xff0c;波澜起伏的剧情能够推动短剧的剧情&#xff0c;吸引观众…

【MRI重建】基于L+S方法的加速动态成像(MATLAB)

关于 L+S 模型很自然地可以表示动态 MRI 数据。重建欠采样数据需要 k−t 空间(采集)与 L 的奇异向量和 S 的稀疏域之间的不相干性。 L 和 S 之间的不相干性是背景和动态分量稳健分离所必需的。多线圈 L+S 重建是使用凸优化方法制定的,其中核范数用于强制 L 中的低秩,而 l1 …

58行代码把Llama 3扩展到100万上下文,任何微调版都适用 | 最新快讯

量子位公众号 QbitAI 堂堂开源之王 Llama 3&#xff0c;原版上下文窗口居然只有……8k&#xff0c;让到嘴边的一句“真香”又咽回去了。 在 32k 起步&#xff0c;100k 寻常的今天&#xff0c;这是故意要给开源社区留做贡献的空间吗&#xff1f; 开源社区当然不会放过这个机会&a…

[JUCE库]关于JUCE如何生成动态链接库 juce-7.0.1-windows

前言 当我们在使用JUCE库的时候&#xff0c;可能会需要使用到静态链接的方式&#xff0c;还好的一点是JUCE本身提供了CMake编译&#xff0c;也提供了单独的sln编译。 本文章仅针对juce-7.0.1-windows&#xff0c;由于不同版本之间差异较大&#xff0c;可能不能通用&#xff0…

Codeforces Round 943 (Div. 3) A~E

A. Maximize? Problem - A - Codeforces 给定x求出使这个式子最大的y&#xff1a; 不用想复杂直接循环枚举即可。 #include<bits/stdc.h> using lllong long; ll n,m; void solve() {int x;std::cin>>x;ll ans0,y;for(int i1;i<x;i){if(std::__gcd(i,x)i>a…

鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步

基本概念 信号量&#xff08;Semaphore&#xff09; 是一种实现任务间通信的机制&#xff0c;可以实现任务间同步或共享资源的互斥访问。 一个信号量的数据结构中&#xff0c;通常有一个计数值&#xff0c;用于对有效资源数的计数&#xff0c;表示剩下的可被使用的共享资源数…

linux 调试-kdb 调试内核-1

目标&#xff1a;打印bcm2835_spi_transfer_one 是如何从用户空间开始调用的 1. kernel 配置 KDB配置选项 添加 spi 控制器驱动 和 spi 设备驱动 2. 调试流程 调试内核-系统启动之后 1. 开发板进入kdb,等待pc 连接 rootraspberrypi:~# echo "ttyS0,115200"…

抖音小店如何快速出单?内行人闭口不提的诀窍,一篇全曝光!

哈喽~我是电商月月 新手做抖店不成功&#xff0c;最大的问题就是不懂技巧&#xff0c;不懂规则&#xff0c;不懂玩法&#xff0c;你基础事项&#xff0c;思维方向都没选好&#xff0c;再怎么努力也别想出单 看下去&#xff0c;新手在开店后不要着急选品&#xff0c;先把这些问…

数据结构复习指导之树的基本概念

文章目录 树与二叉树 考纲内容 复习提示 前言 1.树的基本概念 1.1树的定义 1.2基本术语 1.3树的性质 树与二叉树 考纲内容 &#xff08;一&#xff09;树的基本概念 &#xff08;二&#xff09;二叉树 二叉树的定义及其主要特征&#xff1b;二叉树的顺序存…

22 Debian如何配置Apache2(2)虚拟主机

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何配置Apache2&#xff08;2&#xff09;虚拟主机 《傅老师Debian小知识库系列之22》——原创 前言 傅老师Debian小知识库特点&#xff1a; 1、最…

文件加密软件排行榜前四名(2024年4大好用的加密软件推荐)

说到文件加密&#xff0c;想必大家都很熟悉&#xff0c;文件加密已经普遍应用&#xff0c;文件加密是一种重要的安全措施&#xff0c;可以确保数据的机密性、完整性和可用性&#xff0c;降低因数据泄露或丢失带来的风险 。 下面小编给大家分享几款常用的加密软件&#xff0c;…

【redis】Redis数据类型(五)ZSet类型

目录 类型介绍特点补充 使用场景 Zset类型数据结构ziplist&#xff1a;压缩列表&#xff08;参考之前的文章&#xff09;skiplist&#xff1a;跳表解析 面试题&#xff1a;MySQL索引为什么用B树而不用跳表区别总结 常用命令ZADD示例 ZREM示例 ZCARD示例 ZCOUNT示例 ZSCORE示例 …

spring高级篇(九)

boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码&#xff1a; 参数一是当前类的字节码&#xff0c;参数二是main的args参数。 public class StartApplication {public static…