代码随想录算法训练营第十七天丨110.平衡二叉树、 257. 二叉树的所有路径 、404.左叶子之和

IFIX往Mysql数据库同步数据方法 通过IFix数据库向Mysql数据库同步数据 阅读详情

110. 平衡二叉树

class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if not root: return True
        if abs(self.getDepth(root.left) - self.getDepth(root.right)) > 1: return False
        return self.isBalanced(root.left) and self.isBalanced(root.right)
    def getDepth(self,root):
        if not root:
            return 0
        return 1 + max(self.getDepth(root.left), self.getDepth(root.right))

自己的思路倒是AC了,但是效率有点低。

参考了代码随想录的思路优化代码,可以定义一个getHeight函数用于计算深度,并在计算的过程中给非平衡的二叉树打上标记。换句话说,在求子树高度的时候可以先判断下是否是平衡二叉树,用来剪枝并退出本次递归,效率地解决了问题。

class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if not root: return True
        return self.getHeight(root) != -1
    
    def getHeight(self,root):
        if not root:
            return 0
        leftHeight = self.getHeight(root.left)
        if leftHeight == -1: return -1
        rightHeight = self.getHeight(root.right)
        if rightHeight == -1: return -1
        if abs(leftHeight - rightHeight) > 1: return -1
        return max(leftHeight, rightHeight) + 1

257. 二叉树的所有路径

 

利用递归回溯,记录下所有的路径。

结果是前序遍历的顺序因此使用前序遍历。终止条件就是遇到叶子节点,就把路径加进结果集。递归过程就是前序遍历的递归过程,使用path字符串和result数组记录过程。对于每个栈帧都有一个path,这一层如果不是叶子节点,下一层就给path加上'->'符号递归,直到遇到叶子节点记录后回溯上一栈帧,这时栈帧的path是原本记录好的,继续递归过程。如此循环即可得到所有路径。

class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        result = []
        self.getPath(root,'',result)
        return result
    
    def getPath(self, node, path, result):
        if node:
            path += str(node.val)
            if not node.left and not node.right:
                result.append(path)
            else:
                path += '->'
                if node.left: self.getPath(node.left,path,result)
                if node.right: self.getPath(node.right,path,result)

404. 左叶子之和

利用回溯记录左叶子集,如果是从右边回来的,判断一下右边是不是叶子,如果是,剔除结果。

class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root.left and not root.right:
            return 0
        res = []
        self.checkSum(root, res)
        return sum(res)
    def checkSum(self, root, cnt):
        if not root.left and not root.right:
            cnt.append(root.val)
        if root.left: 
            self.checkSum(root.left,cnt)
        if root.right: 
            self.checkSum(root.right,cnt)
            if not root.right.right and not root.right.left:
                cnt.pop()

相对来说,代码随想录的方法更加优雅。遇到叶子节点终止,返回0;回溯后如果发现是左叶子,那就把结果加上。

class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        if not root.left and not root.right:
            return 0
        
        l = 0
        if root.left and (not root.left.left and not root.left.right):
            l = root.left.val
        return l + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)

今日总结:

回溯发生在递归返回,如果每次都记录递归操作,返回时再操作就是操作回溯。

uniapp(全端兼容) - 最新详细实现双色球开奖走势图功能组件,uni-app红球走势图/蓝球走势图,解决双色球 “蓝球连线“ 问题,双色球效果及用线连接每个号码详细教程(同样适用于彩票开奖走势图 uni-app,双色球,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,红球走势,蓝球走势,连线,uniapp(vue):js实现双色球开奖走势图带连线,vue2,vue3,uniApp双色球组件插件,uniapp如何实现双色球走势图和连线,彩票走势图,前端 Vue实现彩票走势图,详细示例,走势图,彩票项目,绘制股票走势图,前端 JS实现彩票开奖走势图 连线,Uniapp有没有双色球的页面代码,红球蓝球的走势图如何做,双色球红球和值尾走势图, 阅读详情

相关推荐

免费AI视频生成全流程:通义千问+Seedance 2.5+Grok实战指南

AI视频生成正在成为内容创作的重要方式,但高昂的API费用常让个人创作者望而却步。实际上,通过合理组合云端免费工具,也能搭建一条完整的视频生产链路:利用大模型生成脚本,用视频生成模型将文本渲染成画面,再借助多模态模型进行一致性校验。这种“文本+视频+多模态”的协作模式,将复杂的生成任务解耦为可独立调用的模块,既降低了本地硬件要求,也为批量内容验证提供了低成本方案。该流程适用于短视频素材快速产出、产品Demo验证以及AI应用集成等场景,核心在于打通免费账号、API调用与批量任务调度。本文以通义千问、Seeda

weixin_29044157的博客 380

代码随想录算法训练营第十七天|Leetcode110 平衡二叉树、Leetcode257 二叉树的所有路径、Leetcode404 左叶子之和

在之前的文章中已经讨论过对于高度和深度使用哪种遍历方式最优,因为我们需要将子树的平衡结果返回给上一结点,所以我们必然需要先遍历左右结点随后中结点才能达到目的,因此我们在单层递归中使用。因为我们需要将左右子树的左叶子之和返回给其父结点,因此需要先对左右遍历,然后在处理中时将左右子树的左叶子结点加和返回给自身即可,因此其单层遍历逻辑使用。如果我们遍历到叶子结点的时候,我们无法将叶子结点的值返回给其父结点,因此我们只需要遍历到其父结点,通过。输入:root = [1,2,2,3,3,null,null,4,4]

Demok123的博客 1815

中兴OLT配置实战:从零开始,手把手教你完成一个HGU的完整业务开通(含DBA模板、限速与远程升级)

本文详细介绍了中兴OLT配置实战,从零开始手把手教你完成HGU的完整业务开通,包括DBA模板设计、限速与远程升级等关键步骤。通过实际案例和详细命令,帮助工程师快速掌握GPON网络配置技巧,提升运维效率。

weixin_30599769的博客 349

代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和 [二叉树篇]

二叉树、平衡二叉树、路径、左右叶子

leehal的博客 928

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

用树莓派搭建全功能NAS服务器(01):树莓派基础操作&OMV搭建

写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体。如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了。 在这个系列中我们尽量跳过一些枯燥的理论知识,专注于说明两件事:   1.NAS是什么&能做什么 2.搭建思路&怎么做   这中间也会涉及到一些方案的选择,同类方案我也会列出来和大家分享我已知的优缺点,有兴趣可以多种尝试。(侧重于软件) 虽然是用树莓派搭建的,但是对于debian linux系统下的NAS搭建有着很好的参

斯塔克家的真维斯的工作间 2万+

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

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

北天的博客 1197

Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案

【代码】Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案。

2401_86789230的博客 2万+

代码随想录算法训练营第 15 天 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径 LeetCode404左叶子之和 LeetCode222完全二叉树节点之和

从上向下求,例如求深度和路径,用前序遍历; 从下向上求,例如求高度,用后序遍历。

2301_79647020的博客 1276

【OpenCV-Python】图像的载入、显示和输出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

图像的载入:imread()函数 imread()函数可以用来非常便捷地读取文件中的图片到Opencv中。这个函数一般需要两个参数: (1)载入图片的路径名。如果图像文件在工程文件夹下,可以直接用文件名读取,如“cat.jpg”,否则需要输入完整的访问路径,如“D:\\test\\lena.png”。这里还有几个tips: imread函数中,一个点代表省略当前文件夹路径,两个点则代表回...

M&Q的博客 1397

工艺边与定位孔设计经验规则总结

工艺边是在SMT焊接时,为了PCB和导轨接触预留的PCB边。工艺边和PCB的接触部分一般需要开槽,或者使用邮票孔,以方便后期去除工艺边。

fydar的博客 1985

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

二叉树的所有路径不太懂

qq_52149213的博客 1220

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 81

Python - 代码随想录算法训练营第十七天 | LeetCode110.平衡二叉树、LeetCode257. 二叉树的所有路径、LeetCode404.左叶子之和

题目链接给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false。这部分递归的思路还需要学习。’ '.join(map(str,[1,2,3])) 的含义​。

m0_53503719的博客 860

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

代码随想录算法训练营Day13 | Leetcode 110平衡二叉树、257二叉树的所有路径、404左叶子之和、222完全二叉树的节点个数(递归解法)

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。平时我们解二叉树的题目时,已经习惯了通过节点的左右孩子判断本节点的属性,而本题我们要通过节点的父节点判断本节点的属性。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定一个二叉树,判断它是否是高度平衡的二叉树。给出一个完全二叉树,求出该树的节点个数。,返回所有从根节点到叶子节点的路径。说明:叶子节点 是指没有子节点的节点。

叽里呱啦大王的博客 919

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

代码随想录算法训练营DAY17|C++二叉树Part.4|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

状态:还是有思路,我们的cur遍历到叶子结点的前一个结点,也就是cur结点的左结点的(左结点和右结点)为空,这样我们就能顺利找到左叶子。这里的递归函数,通过返回二叉树的高度是最好的,即使我们不需要求二叉树的高度。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。确定递归的返回值和参数:判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的。还有一个要注意的点就是关于递归终止条件,本题的终止条件和之前的有什么不一样呢?

糖炒栗子 1130

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【代码随想录算法训练营Day17】● 110.平衡二叉树;● 257. 二叉树的所有路径;● 404.左叶子之和

因为平衡二叉树的概念是每个节点的左右子树高度差的绝对值不大于1,所以就可以比较每个节点左右子树的。另一个疑问,为啥不能用int类型直接加,哦应该用返回,不能作为参数。精准踩雷,没看清是左叶子,以为是所有左节点。

Tammy2001的博客 1028

代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和

【代码】代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和。

Hsusan的博客 307

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

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。核心思路:递归求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。核心思想:判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。二叉树的深度是指节点到根节点的距离,二叉树的高度是指节点到叶子结点的距离;核心思想:回溯、前序遍历。

weixin_47748259的博客 1053

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

肯定是要遍历,那就用递归法,==这里总结一下心得,用递归法深度遍历就要考虑哪种遍历顺序,根据就是要做什么处理,比如这道题,要判断子树的信息,那就是后序遍历。==定义递归函数的意义:返回以传入节点为根节点的树的高度。一个细节就是判断是否为高度平衡二叉树,用-1表示不是,如果子节点不是高度平衡二叉树,那当前的节点也肯定不是了,算是一个小优化。我的理解就是有递归就要有回溯,但是是有前提的,前提就是只有当递归以后改变了传入参数的信息,并且传入参数在本次递归中还需要利用的就需要回溯,也就是把修改的内容去除掉。

Tong_1024_的博客 832

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

代码随想录题解:​​​​​​​。

qq_42973684的博客 805

二叉树部分: 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和

二叉树部分: 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和

qq_34485768的博客 1644

代码随想录算法训练营Day17|110.平衡二叉树、257. 二叉树的所有路径、 404.左叶子之和

代码随想录算法训练营Day17|110.平衡二叉树、257. 二叉树的所有路径、 404.左叶子之和

qq_41929830的博客 1033

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

从根节点开始到叶子节点的路径,必须前序遍历(先访问中节点,再访问左右节点),如果遇到叶子节点,就将字符串加入路径集合。:一个二叉树每个节点的左右两个子树的高度差的绝对值。但是本题的终止条件这样写会很麻烦,因为本题要找到。:要传入根节点,记录每一条路径的。(该逻辑可以控制空节点不入循环)用来拼接字符串(速度更快)。②终止处理逻辑(把路径放进。,这里递归不需要返回值。的时候,就找到叶子节点。不为空,其左右孩子都为。

weixin_44041958的博客 687

算法训练营Day13 | 110.平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

110.平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数。左叶子的定义:要从叶子的父节点判断,父节点的左节点不为空,且左节点没有左右节点。

weixin_43678826的博客 961

代碼隨想錄算法訓練營|第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和 。刷题心得(c++)

目录 讀題 110.平衡二叉树 自己看到题目的第一想法 看完代码随想录之后的想法 257.二叉树的所有路径 自己看到题目的第一想法 看完代码随想录之后的想法 404.左叶子之和 自己看到题目的第一想法 看完代码随想录之后的想法 110.平衡二叉树 - 實作 思路 錯誤思路 正確思路 Code 錯誤代碼 正確代碼 257.二叉树的所有路径 - 實作 思路 Code 思考 404.左叶子之和 - 實作 思路 Code 總結 自己实现过程中遇到哪些困难 今

RVLIN的博客 1307
上一篇: 代码随想录算法训练营第十六天丨104.二叉树的最大深度、111.二叉树的最小深度 、222.完全二叉树的节点个数
下一篇: 代码随想录算法训练营第十八天丨513. 找树左下角的值、 257. 二叉树的所有路径 、404.左叶子之和
LIEBESFREUD
博客等级 码龄9年 372粉丝 80原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值