当前位置: 首页 > news >正文

leetcode代码记录(平衡二叉树

目录

  • 1. 题目:
  • 2. 我的代码:
  • 小结:

1. 题目:

在这里插入图片描述

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

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

2. 我的代码:

# 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:# 后序遍历统计深度# defdef height(node):# 终止条件if node == None:return 0# 后序遍历left_height = height(node.left)right_height = height(node.right)if abs(left_height - right_height) > 1 or left_height == -1 or right_height == -1:return -1return 1 + max(left_height, right_height)if height(root) == -1:return Falseelse:return True

检查是否是平衡二叉树,其实就是统计高度,然后做差,查看各个树的所有节点的高度差是否大于1。如果大于1则说明不是平衡二叉树;如果全部节点都满足高度差小于等于1,则说明是平衡二叉树。

因此,我们只需要把计算最大高度的代码修改一下即可,因为都是在求高度。只不过在求得高度后做差abs(left_height - right_height)查看是否满足平衡二叉树条件。这里,我们令如果高度差大于1则返回-1,以-1为记号,不断返回(因为只要有一个节点不满足就能确定这个二叉树一定不是平衡二叉树了)。

简便的写法,可以将判断条件合并,再加上 or left_height == -1 or right_height == -1就可以得知上一个节点是否平衡。其余正常返回树的高度即可,因为还要继续服务于上面的节点判断。

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 由浅到深认识Java语言(11):封装
  • stable diffusion 提示词进阶语法-年龄身材肤色-学习小结
  • C++类模板详解
  • 学习总结!
  • 用html画一个烟花特效
  • Java练习:进制转换、日期计算、乘法表两种实现
  • GPT4.0
  • 在linux中展示本月最后一个周五的日期
  • 【C语言进阶篇】编译和链接
  • C语言从入门到实战----数据在内存中的存储
  • ETH 智能合约Gas文章整理
  • JavaScript、ES6与微信小程序之间的联系:工具箱、升级与新房子
  • C语言:文件操作解析
  • 用go实现一个任务调度类 (泛型)
  • 回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测
  • 【技术性】Search知识
  • 78. Subsets
  • centos安装java运行环境jdk+tomcat
  • Java 最常见的 200+ 面试题:面试必备
  • laravel 用artisan创建自己的模板
  • PAT A1092
  • React Transition Group -- Transition 组件
  • swift基础之_对象 实例方法 对象方法。
  • Yeoman_Bower_Grunt
  • 使用权重正则化较少模型过拟合
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 你对linux中grep命令知道多少?
  • 【云吞铺子】性能抖动剖析(二)
  • hi-nginx-1.3.4编译安装
  • ​Java并发新构件之Exchanger
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​批处理文件中的errorlevel用法
  • !$boo在php中什么意思,php前戏
  • # 安徽锐锋科技IDMS系统简介
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #include到底该写在哪
  • #stm32驱动外设模块总结w5500模块
  • $.proxy和$.extend
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (4) PIVOT 和 UPIVOT 的使用
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (四)软件性能测试
  • (原)本想说脏话,奈何已放下
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .dwp和.webpart的区别
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008