代码随想录算法训练营第15天—二叉树04 | ● *110.平衡二叉树 ● *257. 二叉树的所有路径 ● 404.左叶子之和

*110.平衡二叉树

题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html

  • 考点
    • 后序遍历+二叉树高度计算
  • 我的思路
    • 错误地将平衡二叉树的定义等价为判断整体二叉树的最大深度和最小深度之差是否大于1
  • 视频讲解关键点总结
    • 实际上本题应从最低层左右子树开始判断,若左右子树的高度差大于1,则不是平衡二叉树
    • 因此,使用后序遍历计算二叉树的高度
    • 递归三要素
      • 形参为节点,返回值为0(代表遍历到了空节点)/ -1(代表左右子树不平衡) / 当前节点的高度
      • 退出条件:若当前节点为空,则return 0
      • 递归逻辑
        • 后序遍历,左右中
        • 首先计算左子树的高度
        • 再计算右子树的高度
        • 最后判断是否平衡
  • 我的思路的问题
    • 见上
  • 代码书写问题
  • 可执行代码
class Solution:def pro(self, root):if root is None:return 0left_height = self.pro(root.left)if left_height == -1:return -1right_height = self.pro(root.right)if right_height == -1:return -1if abs(left_height - right_height) > 1:return -1else:return 1 + max(left_height, right_height)def isBalanced(self, root: Optional[TreeNode]) -> bool:if root is None:return Trueif self.pro(root) == -1:return Falseelse:return True

*257. 二叉树的所有路径

题目链接/文章讲解/视频讲解:https://programmercarl.com/0257.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84.html

  • 考点
    • 递归+回溯
  • 我的思路
  • 视频讲解关键点总结
    • 递归三要素
      • 形参包括:当前节点,路径字符串,结果列表;返回值为空
      • 退出条件:当前节点为叶子节点时,将当前路径字符串加入结果列表中,并返回
      • 递归逻辑
        • 前序遍历,中左右
        • 在退出条件之上,把当前节点的值加入路径字符串中(为了避免退出递归时遗漏叶子节点)
        • 如果左节点不为空,递归左子节点;递归完左子节点后执行回溯语句(一定是一个递归对应一个回溯),把路径字符串中的最后一个节点删除
        • 如果右节点不为空,递归右子节点;递归完右子节点后执行回溯语句(一定是一个递归对应一个回溯),把路径字符串中的最后一个节点删除
        • 回溯展示
  • 我的思路的问题
    • 无思路
  • 代码书写问题
  • 可执行代码
class Solution:def traversal(self, root, path, result):path.append(str(root.val))if root.left is None and root.right is None:result.append('->'.join(path))returnif root.left:self.traversal(root.left, path, result)path.pop()if root.right:self.traversal(root.right, path, result)path.pop()def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:if root is None:return []path = []result = []self.traversal(root, path, result)return result

404.左叶子之和

题目链接/文章讲解/视频讲解:https://programmercarl.com/0404.%E5%B7%A6%E5%8F%B6%E5%AD%90%E4%B9%8B%E5%92%8C.html

  • 考点
    • 前序遍历
    • 审题(左叶子节点的定义)
  • 我的思路
    • 递归三要素
      • 形参:当前节点,标志位(用来标记当前是否为左节点);无返回值
      • 退出条件:当前节点为空则退出
      • 递归逻辑:
        • 如果标志位为1(代表左节点)且当前节点无子节点(即当前节点为叶子节点),则把当前节点的值加到和值中(和值初始化为Solution类的属性)
        • 左子结点递归(标志位为1)
        • 右子节点递归(标志位为0)
  • 视频讲解关键点总结
    • 没具体看,使用的思路和我大致相仿,但代码逻辑有所区别
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution:def __init__(self):self.summation = 0def sum_left(self, root, flag):if root is None:return 0if flag == 1 and root.left is None and root.right is None:self.summation += root.valself.sum_left(root.left, 1)self.sum_left(root.right, 0)def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:self.sum_left(root, 0)return self.summation

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

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

相关文章

Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)

目录 今天开始进入Redis系列学习分享1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Re…

【MySQL】变量、流程控制

一、变量 在MySQL的存储过程与函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。它可以分为用户自定义变量与系统变量 1、系统变量 1)系统变量分为全局变量(需要使用关键字global)和会话…

【前端素材】bootstrap5实现房产信息网HomeFi平台(附源码)

一、需求分析 房产信息网是一个在线平台,专门提供房地产相关信息的网站。这些网站通常为买家、卖家、租客、房地产经纪人等提供各种房产信息,包括可售房屋、出租房源、房价走势、地产市场分析、房产投资建议等内容。以下是房产信息网的主要功能和特点: 房源信息浏览:用户可…

【lesson60】网络基础

文章目录 网络发展认识协议网络协议初识OSI七层模型TCP/IP五层(或四层)模型网络传输基本流程数据包封装和分用网络中的地址管理 网络发展 以前没有网络剧的工作模式是:独立模式:,计算机之间相互独立 所以多个计算机要协同开发比较难。 有了网络以后&am…

6.s081 学习实验记录(九)lock parallelism

文章目录 一、Memory allocator简介提示实验代码实验结果 二、Buffer cache简介提示实验代码实验结果 该实验将重构某些代码以提高并发度。 首先切换到lock分支: git fetchgit checkout lockmake clean 一、Memory allocator 简介 user/kalloctest 这个程序会对…

关于投资,房地产,AI

各位朋友,新年好! 过个年,世界发生了很多大事! 投资 先是证监会,证监会年前换帅,吴清接棒,吴清何许人也?江湖人称“券商屠夫”,成功处置了2008年的券商风险&#xff0…

Eclipse - Format Comment

Eclipse - Format & Comment 1. Correct Indentation2. Format3. Toggle Comment4. Add Block Comment5. Remove Block CommentReferences 1. Correct Indentation Ctrl A: 选择全部代码 Ctrl I: 校正缩进 or right-click -> Source -> Correct Indentation 2. F…

【开工大吉】推荐4款开源、美观的WPF UI组件库

WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以创建出吸引人且交互性强的应用程序。 HandyControl HandyControl是一套WPF控件库&#xf…

安全技术和防火墙

1.安全技术和防火墙 1.1安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决…

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产…

Python操作Kafka基础教程

01 Python操作Kafka基础教程 创建ZooKeeper容器 docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper创建Kafka容器 语法是: docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID0 -e KAFKA_ZOOKE…

世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)

目录 01《深入理解计算机系统》02《算法导论》03《计算机程序的构造和解释》04《数据库系统概念》05《计算机组成与设计:硬件/软件接口》06《离散数学及其应用》07《组合数学》08《斯坦福算法博弈论二十讲》参与规则 清华、北大、MIT、CMU、斯坦福的学霸们在新学期里…

讨好型人格的职业分析,如何改变讨好型人格

一味讨好他人,忽略自己感受,凡事以人为先,忽视自己需求,这就是讨好型人格。 讨好型人格最典型的表现就是非常注重外界的看法,不管做什么事都会小心翼翼,生怕自己所做的事会引发别人的不满。 如果自己哪方…

MAC电脑系统清理空间免费版软件CleanMyMac X2024

大家好,我是那个总是被苹果电脑“内存已满”提示搞得焦头烂额的专业博主。如果你也像我一样,在使用Mac时经常遭遇卡顿、慢吞吞的情况,那么今天的Mac清理空间妙招分享绝对适合你! CleanMyMac X全新版下载如下: https://wm.makedi…

【Redis快速入门】深入解读哨兵模式

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

HTML 入门指南

简述 参考:HTML 教程- (HTML5 标准) HTML 语言的介绍、特点 HTML:超级文本标记语言(HyperText Markup Language) “超文本” 就是指页面内可以包含图片、链接等非文字内容。“标记” 就是使用标签的方法将需要的内容包括起来。…

电阻(二):希尔伯特(Hilbert)曲线

1、Hilbert简介 希尔伯特曲线是一种能在 2D平面完美填充正方形的曲线,连续且稳定(当细分足够小时,线构成面)而又不可导的曲线。只要恰当选择函数,画出一条连续的参数曲线,当参数 t 在 [0、1 ] 区间取值时&a…

ESP32-Cam学习(2)——PC实时显示摄像头画面

具体代码和操作过程见: 3. 实时显示摄像头画面 (itprojects.cn)https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/e03.showvideo我主要记录一下我在复现的过程中,遇到的问题以及解决方法。 1.安装第三方库 首先电脑端的代码需要用pych…

备战蓝桥杯---动态规划(入门3之子串问题)

本专题再介绍几种经典的字串问题。 这是一个两个不重叠字串和的问题,我们只要去枚举分界点c即可,我们不妨让c作为右区间的左边界,然后求[1,c)上的单个字串和并用max数组维护。对于右边,我们只要反向求单个字串和然后选左边界为c的…

java中x++和++x的区别,执行后x的值是多少

在Java和C等编程语言中,x 和 x 都是用来对变量 x 进行自增操作的表达式,它们的主要区别在于自增操作发生的时机以及返回值: 后置递增运算符 x: 先使用当前 x 的值进行表达式计算,然后将 x 的值加 1。 执行后的 x 值为…