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

6.9平衡二叉树(LC110-E)

绝对值函数:abs()

算法:

高度和深度的区别:

节点的高度:节点到叶子节点的距离(从下往上)

节点的深度:节点到根节点的距离(从上往下)

逻辑:一个平衡二叉树的每个节点的左右子树都是平衡二叉树

调试过程:

# 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:if self.getheight(root) == 0:return Trueelse:return Falsedef getheight(self, node) -> int:if node == None:return 0        leftheight = self.getheight(node.left)rightheight = self.getheight(node.right)#左子树若有不平衡的,就返回-1if leftheight == -1:return -1#右子树若有不平衡的,就返回-1if rightheight == -1:return -1if abs(leftheight-rightheight)>1:return -1else:return 0

原因:问题出在return 0上面,改成return 1 + max(leftheight, rightheight)就好了

`return 0`的含义是将节点的高度设置为0,这是不正确的。

正确的做法是使用`return 1 + max(leftheight, rightheight)`来计算节点的高度。这里的`max(leftheight, rightheight)`表示选择左子树和右子树中较大的高度作为当前节点的高度,然后再加上1,表示当前节点的高度。

通过这种方式,我们可以确保节点的高度正确地传递到父节点,并在比较节点的高度差时得到正确的结果。如果节点的左子树和右子树高度差超过1,那么在递归过程中会返回-1,最终导致`isBalanced`函数返回False。

正确代码:

# 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:if self.getheight(root) != -1:return Trueelse:return Falsedef getheight(self, node) -> int:if node == None:return 0        leftheight = self.getheight(node.left)rightheight = self.getheight(node.right)#左子树若有不平衡的,就返回-1if leftheight == -1:return -1#右子树若有不平衡的,就返回-1if rightheight == -1:return -1if abs(leftheight-rightheight)>1:return -1else:return 1 + max(leftheight, rightheight)

时间空间复杂度:
时间复杂度:

  • `isBalanced`函数中,我们调用了`getheight`函数来计算每个节点的高度。在最坏情况下,需要遍历二叉树的所有节点,因此时间复杂度为O(n),其中n是二叉树中的节点数。
  • `getheight`函数是一个递归函数,它会遍历二叉树的所有节点。对于每个节点,我们需要递归地计算其左子树和右子树的高度,因此总的时间复杂度也是O(n)。
  • 综上所述,整个算法的时间复杂度为O(n)。

空间复杂度:

  • 在`getheight`函数中,递归调用会产生函数调用栈。在最坏情况下,二叉树是一个完全不平衡的树,即链表形式,此时递归的深度为n,因此空间复杂度为O(n)。
  • 综上所述,整个算法的空间复杂度为O(n)。

相关文章:

  • RT-Thread STM32F407 BMI088--SPI
  • iptables详解:链、表、表链关系、规则的基本使用
  • 本地jar导入maven
  • 【2023春李宏毅机器学习】生成式学习的两种策略
  • 计算机毕业设计选题推荐-高校后勤报修微信小程序/安卓APP-项目实战
  • 小美的排列构造
  • Java Web 实战 19 - What‘s HTTP ?
  • 75基于matlab的模拟退火算法优化TSP(SA-TSP),最优路径动态寻优,输出最优路径值、路径曲线、迭代曲线。
  • 重磅 | 进一步夯实生态建设,朗思科技与阿里龙蜥完成兼容性认证
  • MongoDB之索引和聚合
  • 在IDEA中的DeBug调试技巧
  • 酷柚易汛ERP - 盘点操作指南
  • 【数据结构】图的深度优先遍历
  • 参考文献格式
  • 【技术追踪】SAM(Segment Anything Model)代码解析与结构绘制之Mask Decoder
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017前端实习生面试总结
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • chrome扩展demo1-小时钟
  • CSS 三角实现
  • Fabric架构演变之路
  • java第三方包学习之lombok
  • js如何打印object对象
  • node 版本过低
  • orm2 中文文档 3.1 模型属性
  • Ruby 2.x 源代码分析:扩展 概述
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 给新手的新浪微博 SDK 集成教程【一】
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端相关框架总和
  • 十年未变!安全,谁之责?(下)
  • 使用 @font-face
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一些关于Rust在2019年的思考
  • 异步
  • 在Unity中实现一个简单的消息管理器
  • ​queue --- 一个同步的队列类​
  • ​业务双活的数据切换思路设计(下)
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (11)MATLAB PCA+SVM 人脸识别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (AngularJS)Angular 控制器之间通信初探
  • (分布式缓存)Redis哨兵
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)【Hibernate总结系列】使用举例
  • (转)编辑寄语:因为爱心,所以美丽
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net反编译的九款神器
  • .NET基础篇——反射的奥妙
  • .net与java建立WebService再互相调用
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务