力扣:110. 平衡二叉树(Python3)

news2024/11/24 7:59:04

题目:

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

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 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, 0],存在result中。

如果当前结点只有左子树,记录[max(result[-1]) + 1, 0],替换result最后1个元素,替换的目的是保证result中最后2个元素中有至少1个是当前结点的子树。如果max(result[-1]) + 1已经大于1,说明此时左子树的深度大于等于2,而右子树的深度为0,所以返回False。

如果当前结点只有右子树,同理只有左子树的情况。

如果当前结点有左子树和右子树,记录[max(result[-2]) + 1, max(result[-1]) + 1],删除result中最后2个元素并添加新记录,这样操作的目的同样是保证result中最后2个元素中有至少1个是当前结点的子树。如果max(result[-2]) + 1和max(result[-1]) + 1相差大于1,说明此时已不满足平衡的条件,返回False。

最后返回True,因为不平衡的情况会中途返回False,所以,如果没有中途返回说明是平衡二叉树。

知识点:

1.平衡二叉树:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。

代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        result = []
        stack = []
        while root or stack:
            while root:
                stack.append(root)
                root = root.left if root.left else root.right

            root = stack.pop()
            if root.left is None and root.right is None:
                result.append([0, 0])
            elif root.left and root.right is None:
                if (t1 := max(result[-1]) + 1) > 1:
                    return False
                result[-1] = [t1, 0]
            elif root.left is None and root.right:
                if (t2 := max(result[-1]) + 1) > 1:
                    return False
                result[-1] = [0, t2]
            else:
                if abs((t3 := max(result[-2]) + 1) - (t4 := max(result[-1]) + 1)) > 1:
                    return False
                result.pop()
                result[-1] = [t3, t4]
            root = stack[-1].right if stack and stack[-1].left == root else None
        return True

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

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

相关文章

课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)

磁性测量工具安装在非磁性钻铤内,如图1,以避免磁性随钻测量工具测量时受到外部干扰。 测量系统采用三轴加速度计和三轴磁通门,并采用冗余设计,由于井下振动剧烈,陀螺仪的可靠性将大大降低。为了保证整个钻井过程中系统…

XC2028A CC/CV降压车充芯片,12V降5V,24V降5V,2.5A带限流功能的降压IC

XC2028A具有最佳输入电压、降压转换器,可在CV(恒定输出电压)模式或CC(恒定输出电流)模式下工作,OCP电流值由电流感应电阻设置。最大输入电压高达32V,MOSFET,什么是建立在50mΩ高侧和…

搭建BP神经网络

1.数据集下载 2.C语言代码 BP.h #ifndef BP_H_INCLUDED #define BP_H_INCLUDED const int INPUT_LAYER 784; //输入层维度 const int HIDDEN_LAYER 40; //隐含层维度 const int OUTPUT_LAYER 10; //输出层维度 const double LEARN_RATE 0.3; //学习率 const int TRAIN_TIM…

Sringcloud:一、微服务介绍+常用技术框架和技术对比+服务拆分demo

微服务介绍 单体架构 简介 将业务所有功能集中在一个项目中开发,打成一个包部署优点 架构简单部署成本低 缺点 耦合度高,不利于后续更新迭代 分布式架构 简介 每个业务模块作为一个独立项目开发,称为一个服务,但通常仍共用一…

Spark集成ClickHouse(笔记)

目录 前言: 一.配置环境 1.安装clickhouse驱动 2.配置clickhouse环境 二.spark 集成clickhouse 直接上代码,里面有一些注释哦! 前言: 在大数据处理和分析领域,Spark 是一个非常强大且广泛使用的开源分布式计算框架…

从想象力到生产力,VR全景技术让亚运会走进你的身边

杭州亚运会开幕,各方面氛围感直接拉满,既是一场体育盛会,也是一场科技盛宴,VR技术也融入了亚运会的方方面面。在5G技术的加持下,VR全景技术可以将亚运会各项赛事提升到一个很高的水平,观众即使不在现场&…

【医疗图像处理软件】重要功能集合

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 一起挑战150岁生命线! 前言之前:从事医疗器械行业使我们更加关注自己的健康,每天看着髋膝关节置换的手术视频,我们会更加爱护自己的膝盖。同…

给你两个集合,要求{A} + {B}

先看题&#xff1a; 看完题后你会觉得&#xff1a;哇&#xff0c;好简单&#xff0c;STL一下就出来啦。 #include <iostream> #include <set>using namespace std;int main() {int n, m;while (cin >> n >> m) {set<int> set_a;for (int i 0;…

第二证券:造谣?判了!有人少花四五万!美元突破近10个月高位

当地时间9月25日&#xff08;周一&#xff09;&#xff0c;美国三大股指停步四连跌。纳斯达克我国金龙指数跌1.1%&#xff0c;抱负轿车跌近10%。蔚来跌幅明显收窄&#xff0c;盘终跌超2%。美元指数一度升破106关口&#xff0c;刷新上一年11月底以来的10个月最高&#xff0c;此前…

Qt扫盲-QSqlQueryModel理论总结

QSqlQueryModel理论总结 一、概述二、使用1. 与 view 视图 绑定2. 分离视图&#xff0c;只存数据 一、概述 QSqlQueryModel是用于执行SQL语句和遍历结果集的高级接口。它构建在较低级的 QSqlQuery之上&#xff0c;可用于向QTableView 等视图类提供数据&#xff0c;也是使用了Q…

中国大模型的路,是不是走歪了?

大数据产业创新服务媒体 ——聚焦数据 改变商业 在这波全球大模型的浪潮中&#xff0c;中国与美国无疑成为了领军者。但中美在大模型的发展策略上却出现了显著的分歧。美国&#xff0c;以OpenAI为代表&#xff0c;持续致力于通用型大模型的研发。与此相反&#xff0c;中国则将…

著名数字音频工作站FL Studio 21.0.3.3517中文破解安装图文激活教程

在一个技术继续塑造我们日常生活的世界里&#xff0c;创造力找到了表达自己的新渠道。FL Studio 21成为一个强大的工具&#xff0c;使个人能够创作自己的音乐杰作。一个人需要广泛的乐器知识或一个成熟的工作室来创作交响乐的日子已经一去不复返了。有了FL Studio 21&#xff0…

MySQL作业:索引、视图、存储、函数

学生表&#xff1a;Student (Sno, Sname, Sex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, Score) …

【响应式布局】

响应式布局 1 什么是响应式布局2 响应式布局的5种实现方案2.1 百分比布局2.2 媒体查询布局2.3 rem响应式布局2.4 vw / vh响应式布局2.5 flex弹性布局 1 什么是响应式布局 响应式布局就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互…

地球的某一片红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——旅行季许少辉八月新书辉少许想象和世界一样宽广

地球的某一片红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——旅行季许少辉八月新书辉少许想象和世界一样宽广 地球的某一片红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——旅行季许少辉八月新书辉少许想象和世界一样宽广]

定义现代化实时数据仓库,SelectDB 全新产品形态全面发布

导读&#xff1a;9 月 25 日&#xff0c;2023 飞轮科技产品发布会在线上正式召开&#xff0c;本次产品发布会以 “新内核、新图景” 为主题&#xff0c;飞轮科技 CEO 马如悦全面解析了现代化数据仓库的演进趋势&#xff0c;宣布立足于多云之上的 SelectDB Cloud 云服务全面开放…

C++学习资源

https://www.cnblogs.com/xueweihan/p/13928719.html GitHub - Light-City/CPlusPlusThings: C那些事 GitHub - 0voice/introduce_c-cpp_manual: 一个收集C/C新手学习的入门项目&#xff0c;整理收纳开发者开源的小项目、工具、框架、游戏等&#xff0c;视频&#xff0c;书籍&a…

[密码学入门]仿射密码(Affine)

加密算法y(axb)mod N 解密算法x*(y-b)mod N(此处的为a关于N的乘法逆元&#xff0c;不是幂的概念&#xff09; 如何求&#xff0c;涉及的知识挺多&#xff0c;还没想好怎么写&#xff0c;丢番图方程&#xff0c;贝祖定理&#xff08;又译裴蜀定理&#xff09;&#xff0c;扩展欧…

学物联网有前途吗?

学物联网有前途吗&#xff1f; 物联网即“万物相连的互联网”&#xff0c;是互联网基础上的延伸和扩展的网络&#xff0c;将各种信息传感设备与互联网结合起来而形成的一个巨大网络&#xff0c;实现在任何时间、任何地点&#xff0c;人、机、物的互联互通。最近很多小伙伴找我&…