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

【Leetcode】剑指Offer 34:二叉树中和为某一值的路径

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:[]
示例 3:
输入:root = [1,2], targetSum = 0
输出:[]
提示:
树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

AC代码

# 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 pathSum(self, root: TreeNode, target: int) -> List[List[int]]:
        res = []
        def dfs(node:TreeNode, temp:List):
            if node.left == None and node.right == None:
                current = 0
                for i in temp:
                    current += i.val
                if current == target:
                    res.append([i.val for i in temp])
            else:
                if node.left != None:
                    temp.append(node.left)
                    dfs(node.left, temp)
                    temp.remove(node.left)
                if node.right != None:
                    temp.append(node.right)
                    dfs(node.right, temp)
                    temp.remove(node.right)
        
        if root == None:
            return []
        dfs(root, [root])
        return res

此题人肉debug了两遍才发现最开始写错的地方,主要是叶子节点部分,其实在上一步就已经添加了,最后只需要直接求和就可以进行比较。

官方题解

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        res, path = [], []
        def recur(root, tar):
            if not root: return
            path.append(root.val)
            tar -= root.val
            if tar == 0 and not root.left and not root.right:
                res.append(list(path))
            recur(root.left, tar)
            recur(root.right, tar)
            path.pop()

        recur(root, sum)
        return res

作者:jyd
链接:https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/solution/mian-shi-ti-34-er-cha-shu-zhong-he-wei-mou-yi-zh-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

通过递归的时候多一个tar变量,然后将path作为公共栈做了求和上的简化计算以及空间上的节省开支。

相关文章:

  • CockroachDB架构-复制层
  • Netty 入门学习(1)
  • Android手部检测和手势识别(含训练代码+Android源码+手势识别数据集)
  • 【NLP】第4章 从头开始预训练 RoBERTa 模型
  • 第3章 循环神经网络
  • 机器学习入门八
  • java毕业设计流浪动物救助公益平台源码+lw文档+mybatis+系统+mysql数据库+调试
  • 物联网IOT面临挑战
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • Intel汇编-奇偶标志位测试
  • CMSC5724-关于条件概率和朴素贝叶斯分类器
  • FFmpeg入门详解之50:SDL2键盘事件案例
  • c 关键字
  • 使用hardhat 开发以太坊智能合约-发布合约
  • 【Linux】进程间通信介绍及匿名管道使用
  • .pyc 想到的一些问题
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CAP理论的例子讲解
  • Effective Java 笔记(一)
  • java多线程
  • js如何打印object对象
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • SpingCloudBus整合RabbitMQ
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 阿里云前端周刊 - 第 26 期
  • 从零开始学习部署
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 删除表内多余的重复数据
  • 使用 @font-face
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​ssh免密码登录设置及问题总结
  • ​用户画像从0到100的构建思路
  • ###C语言程序设计-----C语言学习(6)#
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pytorch进阶之路)扩散概率模型
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • .jks文件(JAVA KeyStore)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NetCore部署微服务(二)
  • .net反编译的九款神器
  • @Autowired 与@Resource的区别
  • @Mapper作用
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记