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

news2025/1/19 17:05:28

*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 0
        left_height = self.pro(root.left)
        if left_height == -1:
            return -1
        right_height = self.pro(root.right)
        if right_height == -1:
            return -1
        if abs(left_height - right_height) > 1:
            return -1
        else:
            return 1 + max(left_height, right_height)
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if root is None:
            return True
        if self.pro(root) == -1:
            return False
        else:
            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))
            return
        if 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 = 0
    def sum_left(self, root, flag):
        if root is None:
            return 0
        if flag == 1 and root.left is None and root.right is None:
            self.summation += root.val
        self.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.coloradmin.cn/o/1455376.html

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

相关文章

VBA技术资料MF120:打印固定标题行列

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

MySQL跨服务器关联查询

1. 首先确认服务器的Federated引擎是否开启 show engines;修改数据库的配制文件my.ini,(我的my.ini的路径为:D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中 到MySQL的my.cnf配置文件中修改 在 [mysqld] 下方加入 federated 然后重…

6.s081 学习实验记录(七)Multithreading

文章目录 一、Uthread: switching between threads简介提示实验代码实验结果 二、Using threads简介实验代码 三、Barrier简介实验代码实验结果 一、Uthread: switching between threads 简介 切换到 thread 分支 git fetchgit checkout threadmake clean 实现用户态线程的…

Python学习04 --- 函数进阶以及文件相关操作

1.函数的多返回值 1.函数可以有多个返回值,返回值之间用逗号隔开 2.多个返回值之间的类型可以不同 3.函数返回多个返回值时,我们也要用多个变量接收函数返回值,具体语法如上: 根据位置一一对应,x,y,z分别对应返回值…

【论文精读】Latent Diffusion

摘要 Diffusion models(DMs)被证明在复杂自然场景的高分辨率图像合成能力优于以往的GAN或autoregressive (AR)transformer。作为基于似然的模型,其没有GAN的模式崩溃和训练不稳定问题,通过参数共享&#xf…

c++day5作业

思维导图 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲…

实例讲解join方法的使用

Python的join()方法用于将序列中的元素以指定的字符连接生成一个新的字符串 语法 str.join(sequence) 参数 sequence 要连接的元素序列、字符串、元组、字典 返回值 返回通过指定字符连接序列中的元素后生成的新的字符串 实例 str "-"; seq ("a"…

php数据类型以及运算符、判断条件

php数据类型以及运算符 1. php数据类型2. 使用举例3. 运算符4. 判断条件if else elseif 1. php数据类型 包括 String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Object(对象)、NULL(空值) 2. 使用举例 1.字符串 2.整型 3.浮点型 4.布尔型 5.数组…

树莓派:使用mdadm为重要数据做RAID 1保护

树莓派作为个人服务器可玩性还是有点的。说到服务器,在企业的生成环境中为了保护数据,基本上都会用到RAID技术。比如,服务器两块小容量但高性能的盘做个RAID-1按装操作系统,余下的大容量中性能磁盘做个RAID-5或者RAID-6存放数据。…

MT8781核心板_MTK8781安卓核心板规格参数

MT8781安卓核心板以其强大的性能和高效的能耐备受瞩目。其八核CPU架构包括(2x Cortex-A76 2.2GHz 6x Cortex-A55 2.0GHz),以及高性能的Arm Mali G57级GPU。同时,配备高达2,133MHz的LPDDR4X内存和快速的UFS 2.2级存储,大大加速了数据访问速…

MyBatis基础学习

一、MyBatis简介 二、MyBatis-HelloWorld 三、MyBatis-全局配置文件 四、MyBatis-映射文件 五、MyBatis-动态SQL 六、MyBatis-缓存机制 七、MyBatis-Spring整合 八、MyBatis-逆向工程 九、MyBatis-工作原理 十、MyBatis-插件开发

JavaScript中延迟加载的方式有哪些

在web前端开发中,性能优化一直是一个非常重要的话题。当我们开发一个页面时,为了提高用户的体验和页面加载速度,我们往往需要采用一些延迟加载的技术。JavaScript中延迟加载的方式有很多种,下面我将为大家详细介绍几种常用的方式。…

一杯咖啡一根烟,一个bug改一天,让程序员崩溃的43个瞬间

一杯咖啡一根烟,一个bug改一天 新年刚刚开始,我估计大家都还处于打发时间的状态吧!让我们来谈谈一些轻松的内容,调整一下心情,希望所有在座的朋友,在2024年能够bug多多,收入多多,美女…

Linux网络----防火墙

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

Three.js学习10:几何体(1)-平面几何体

-----------------------------华丽的分割线--------------------- 相关代码均已上传到 gitee 中:myThree: 学习 Three.js ,努力加油~! Gitee 静态演示地址:Three JS 演示页面 -----------------------------华丽的分割线------…

C语言—for循环(1)

for 语句在语法格式上,降低了提供循环结构时,遗忘循环三要素的几率。 for语句的应用场景:对循环次数预先可以获知的情况,如果预先无法获知次数时,推荐使用while语句 1.当型循环:(while) 特点: 先判断后执行…

Windows 安装和连接使用 PgSql数据库

一. PostgreSQL 安装详细步骤 下载地址:https://www.enterprisedb.com/postgresql-tutorial-resources-training-1?uuidd732dc13-c15a-484b-b783-307823940a11&campaignIdProduct_Trial_PostgreSQL_16 1. 双击打开安装包 2. 选择安装目录 3. 选择安装组件 4.…

[Flask]SSTI1 buuctf

声明:本篇文章csdn要我一天发两篇所以我来水的 跟ssti注入的详细知识我这里写了 https://blog.csdn.net/weixin_74790320/article/details/136154130 上面链接我复现了vulhub的SSTI,其实本质上是一道题 然后我们就用{{.__class__}}看类的类型&#xf…

java+vue_springboot企业设备安全信息系统14jbc

企业防爆安全信息系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了vue框架。该系统从三个对象:由管理员、人员和企业来对系统进行设计构建。主要功能包括:个人信息修改,对人员管理&am…

HBuilderX 插件开发指南(一):从插件开发到发布的完整流程

前端目前主流使用的IDE工具有VS Code、Sublime Text3、HBuilder X等等 本期我们主要了解HBuilder X,作为前端通用型开发工具,拥有可视化的操作方式,内置相关环境,开箱即用,无需配置nodejs等优点外,对uni-a…