【代码随想录day19】路径总和

news2024/12/24 2:19:29

题目 

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

思路 

一定要认真审题,题目说的是从根节点到叶子节点的路径,而我最开始以为只要里面有相加为target的就行,导致了一些错误。

其实整体思路比较简单,对于每一个节点,我们判断 它和target-root.val是否相等 且 是叶子节点 ,如果这样的节点存在,就说明找到了一条从根节点到叶子节点的路径且路径和为target。如果走到空节点都没找到,说明当前路径不是我们要找的,返回False。最后只要左子树或者右子树中的任意一个为True都算成功找到了。

# 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 hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def solve(root,target):
            if not root:
                return False
            if target==root.val and not root.left and not root.right:
                return True
            left = solve(root.left,target-root.val)
            right = solve(root.right,target-root.val)
            return left or right
        return solve(root,targetSum)

非递归方式

# 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 hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def solve(root,target):
            if not root:
                return False
            stack = [(root, root.val)]
            while stack:
                now, path_sum = stack.pop()
                if path_sum==target and not now.left and not now.right:
                    return True
                if now.left:
                    stack.append((now.left, path_sum+now.left.val))
                if now.right:
                    stack.append((now.right, path_sum+now.right.val))
            return False
        return solve(root, targetSum)

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

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

相关文章

ip校园广播音柱特点

ip校园广播音柱特点IP校园广播音柱是一种基于IP网络技术的音频播放设备,广泛应用于校园、商业区、公共场所等地方。它可以通过网络将音频信号传输到不同的音柱设备,实现远程控制和集中管理。IP校园广播音柱具备以下特点和功能:1. 网络传输&am…

解决嵌入式中QTableWidget双击出现空白QTableWidgetItem输入

目录 所说BUG现象解决方式1方式2全部内容 效果 今天突然想起在上个公司解决的一个BUG 嵌入式中QTableWidget一般只能看数据不能编辑,或者是选择 所以双击出现空白QTableWidgetItem是不允许的 所说BUG现象 解决 在空白的单元格中,添加不可编辑的QTableWid…

工业物联网网关让PLC数据手机端监控和报警更加简单

在传统的工厂管理中,我们想要看到现场设备的实时数据,必须在控制室内通过工控机、电脑、触摸屏等这些上位机设备才能看到,同理PLC维护也需要工程师在现场进行编程调试工作,非常不方便。 随着工业物联网的发展,作为设备…

一个废话巨多的 printf 题

网友给了一个题,这题是个格式化字符串漏洞的题。很有代表性,专门把这题说一下。其中为入门级的多说些废话。 附1:gdb 作pwn题是绕不开gdb的,而gdb本身不方便用,于是有了各种插件pwngdb,peda,gdbinit,gef都很牛&#…

Kafka-配置Kerberos安全认证(JDK8、JDK11)

一、相关配置 1、JAAS 配置文件 KafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTabtruestoreKeytrueserviceName"kafka"keyTab"D:/code/demo/conf/kafka.service.keytab"principal"kafka/hdp-1"; }; 2、keytab 文…

网络安全必备的10款工具(附安装包)

“磨刀不误砍柴工”。 优秀的工具有助于提高工作效率,安全工程师也需要优秀的安全软件来提高工作效率。 在具体的工作场景中,有很多种选择,这里有10种开源的免费安全工具,不仅可以提高工作效率,还可以降低企业成本。 …

elasticsearch使用记录

参考文章:https://elasticsearch-py.readthedocs.io/en/v8.8.2/ 参考文章:https://cuiqingcai.com/6214.html 参考文章:https://www.cnblogs.com/cupleo/p/13953890.html elasticsearch版本:8.8.2(软件包发行版) python版本&#…

大数据教材推荐-《Python数据分析与应用(第2版)(微课版)》

《Python数据分析与应用(第2版)(微课版)》 是“十四五”职业教育国家规划教材,也是大数据应用开发“1X”职业技能等级证书配套系列教材,以任务为导向,全面介绍数据分析的流程和应用,详细讲解利用Python解决企业实际问题的方法。内…

Object.hasOwn 低版本浏览器兼容性问题解决

使用 hasOwn 去测试属性是否存在 ,报错如下: 原因: hasOwn是es2022新语法,旧浏览器不支持。 解决方案: 使用Object.hasOwnProperty()代替。 Object.prototype.hasOwnProperty.call(obj, id)

1台相当于种20棵树!海尔冷媒变流空调获用户和社会双重满意

作者 | 曾响铃 文 | 响铃说 空调调到26度,风速调到2档,长按制冷键5秒......每年夏天,暑热来临,在抖音、小红书等社交平台上总能刷到类似的“开空调小技巧”。据说,按照这样来开空调,不仅可以实现凉而不冷…

-bash: /bin/rm: Argument list too long

有套数据库环境,.aud文件太多导致/u01分区使用率过高,rm清理时发现报错如下 [rootdb1 audit]# rm -rf ASM1_ora_*202*.aud -bash: /bin/rm: Argument list too long [rootdb1 audit]# rm -rf ASM1_ora_*20200*.aud -bash: /bin/rm: Argument list too…

Sui Move与标准Move的有哪些区别和根本性创新

Sui网络将Sui Move作为其本地编程语言,使用Sui Move编写的apps利用Sui的共识机制,实现了令人印象深刻的交易性能。 然而,熟悉Move编程语言的开发者在探索Sui文档时可能会感到困惑,因为该文档着重介绍了对象和一些指令&#xff0c…

使用TensorFlow训练深度学习模型实战(上)

大家好,尽管大多数关于神经网络的文章都强调数学,而TensorFlow文档则强调使用现成数据集进行快速实现,但将这些资源应用于真实世界数据集是很有挑战性的,很难将数学概念和现成数据集与我的具体用例联系起来。本文旨在提供一个实用…

自然语言处理应用程序设计

原文地址:https://zhanghan.xyz/posts/22426/ 文章目录 一、摘要二、数据集三、相关环境四、功能展示1.系统主界面2.中文分词3.命名实体识别4.文本分类5.文本聚类6.其他界面 五、源码链接 一、摘要 将自然语言处理课程设计中实现的模型集成到自然语言处理应用程序…

利用模 m 的原根存在性判断以及求解

完整资料进入【数字空间】查看——搜索"writebug" 一、题目: 模 m 的原根存在性判断以及求解。判断 m 原根是否存在,如存在给出一个原根以及所有原根。 二、问题描述 首先要判断给定模 m 是否存在原根,然后需要对其原根进行求解。…

js截取字符串

1、 split() 方法用于把一个 字符串 分割成 字符串数组 var str "123,456,789"; console.log(str.split()); // ["1", "2", "3", ",", "4", "5", "6", ",", "7", &…

性能测试—性能监控

性能监控 性能监控是指通过收集、分析和报告关键性能指标,实时监测系统、应用程序或网络的性能和健康状况。通过性能监控,您可以及时发现潜在的性能问题,识别系统瓶颈,并进行性能优化。 以下是一些常见的性能监控指标和技术&…

标准IO_打开和关闭文件_fopen,fdopen,freopen,stdin,stdout,stderr

目录 1.打开文件 1.1 fopen函数原型 1.1.1 fopen函数 1.1.2 fopen函数原理 1.1.3 文本文件和二进制文件区别? 1.1.4 “r"模式和“rb”模式区别? 1.1.5 fopen函数使用示例 1.2 fdopen函数原型 1.2.1 fdopen函数 1.2.2 fdopen函数原理 1.2…

电脑丢失msvcp140.dll的解决方法分享

如果你在使用电脑时遇到了“找不到msvcp140.dll”的错误提示,别着急!这并不是什么严重的问题,电脑丢失msvcp140.dll的解决方法分享,只要你按照以下方法进行处理,很快就能够顺利地解决它。 一.什么是msvcp140.dll msvc…

Spring Boot与MyBatis结合 实现对mock平台改造

上一章: 测开工具:spring boot 实现mock平台_springboot搭建mock_做测试的喵酱的博客-CSDN博客 代码地址: GitHub - 18713341733/mock: Spring Boot与MyBatis结合 实现对mock平台改造 一、背景 读取数据改为从mysql数据库中读取。 Sp…