33-剑指 Offer 34. 二叉树中和为某一值的路径

news2024/11/16 1:55:19

题目

给你二叉树的根节点 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


思路:深度优先搜索dfs+回溯法+前序遍历+路径记录+递归

pathSum(root, target) 函数:

初始化: 结果列表 res ,路径列表tmp。

返回值: 返回 res 即可。

dfs(root, target) 函数:

递推参数: 当前节点 root ,当前目标值 target 。

终止条件: 若节点 root 为空,则直接返回。

递推工作:

路径更新: 将当前节点值 root.val 加入路径 tmp ;

目标值更新: target = target - root.val(即目标值从target减至 0);

路径记录: 当root 为叶节点且路径和等于目标值 ,则将此路径 tmp 加入 res 。

先序遍历: 递归左 / 右子节点。

路径恢复: 向上回溯前,需要将当前节点从路径 tmp 中删除。


代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<List<Integer>> res;
    List<Integer> tmp;
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        res = new ArrayList<>();
        tmp = new ArrayList<>();
        dfs(root, target);
        return res;
    }

    public void dfs(TreeNode root, int target) {
        if(root == null) {
            return;
        }
        tmp.add(root.val);
        target = target - root.val;
        if(root.left == null && root.right == null && target == 0) {
            res.add(new ArrayList<>(tmp));
        }
        dfs(root.left, target);
        dfs(root.right, target);
        tmp.remove(tmp.size() - 1);
    }
}

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

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

相关文章

邮箱中的Qt线程设计

邮箱&#xff08;deepin-mail&#xff09;主要使用Qt框架开发&#xff0c;是一个有大量并行任务且需要监控进度和结果的项目&#xff0c;任务的优先级调整和支持取消回滚也是必不可少。Qt已经为我们提供了多种线程设计的方法&#xff0c;可以满足绝大部分使用场景&#xff0c;但…

钧瓷产业基础架构(SCA架构)是钧瓷产业发展的核心引擎

《钧瓷内参》独立客观&#xff0c;原创前瞻&#xff0c;深度评论&#xff0c;定期推送 钧 瓷 内 参 第3期&#xff08;总第335期&#xff09; 2023年1月3日 钧瓷产业数字化发展的下一个阶段——钧瓷共同体&#xff0c;是钧瓷产业数字化发展的必然趋势。 实现钧瓷共同体的路线…

JavaSE从基础到入门:String类的学习

前言 字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 1.String类的方法 1.字符串的构造方法 使用常量串构造 String s1 "hello world"; System.out.println(s1);直接newString对象…

【Linux】Linux基本权限

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1.shell命令以及运行原理 2.Linux权限 2.1Linux权限的概念 2.2Linux上用户…

DALLE2-文本图像生成

文章目录摘要算法解码器prior图像处理变体插值文本差异限制论文&#xff1a; 《Hierarchical Text-Conditional Image Generation with CLIP Latents》github&#xff1a; https://github.com/lucidrains/DALLE2-pytorchhttps://github.com/LAION-AI/dalle2-laion摘要 CLIP已经…

window环境安装mysql8.0.12版本的安装、配置(详细步骤图解)

目录一、mysql官网下载网址二、下载步骤三、安装步骤四、测试链接一、mysql官网下载网址 mysql官网下载网址 https://www.mysql.com/ 二、下载步骤 浏览器输入https://www.mysql.com/网址&#xff0c;点击【DownLoads】&#xff0c;如下图&#xff1a; 向下滑动网页&#x…

软件测试面试注意事项汇总

面对最近的复工热潮&#xff0c;不少求职者也开始蠢蠢欲动准备找工作了。相信大家都知道疫情下面试求职的压力是有史以来最大的&#xff0c;我们唯一能做好的只有积极的准备面试&#xff0c;让自己可以更加从容的面对的面试官的提问。下面小编为大家汇总了软件测试面试过程中的…

CSDN官方猿如意工具体验

2022年注定是不平凡的一年&#xff0c;2022再见&#xff0c;2023你好&#xff01; 2023愿我们发财&#xff0c;被爱&#xff0c;一路好运常在&#xff01;愿所念之人平安喜乐&#xff0c;所想之事顺心如意&#xff0c;岁岁常欢喜&#xff0c;万事皆胜意&#xff01; 猿如意工具…

中间件:Win10安装运行Kafka

一、JDK环境安装配置 可参考&#xff1a;百度安全验证 二、Zookeeper安装配置 1、下载 &#xff1a; Index of /dist/zookeeper/zookeeper-3.4.9 2、解压到本地&#xff0c;目录不要带中文符号&#xff0c;保证纯英文 3、zoo.cfg修改 4、cmd运行&#xff0c;使用命令zkServe…

ConcurrentHashMap 线程安全

JDK1.7 结构 数据结构是数组segment对象&#xff0c;采用segment分段锁和CAS保证并发。 加锁 JDK1.7中的ConcurrentHashMap是由 segment数组结构和 HashEntry 数组结构组成&#xff0c;即 ConcurrentHashMap把哈希桶切分成小数组(Segment )&#xff0c;每个Segment 有n个 Hash…

终于!Linaro 加盟 Zephyr 项目

导读为物联网构建实时操作系统的开源协作项目 Zephyr 项目宣布&#xff0c;Linaro 有限责任公司以白金会员的身份加盟该项目。Linaro是一家为 ARM 架构开发开源软件的协作工程组织&#xff0c;也是全球性机构&#xff0c;其 35 个成员中不乏来自多个行业部门的龙头企业。Linaro…

嵌入式实时操作系统的设计与开发(一)

以一款简单、易学的嵌入式开发平台ARM Mini2440&#xff08;CPU是三星ARM 9系列的ARM S3C2440&#xff09;为例&#xff0c;通过具体代码实现&#xff0c;介绍如何从裸板入手设计简单的轮询系统、前后台系统&#xff0c;以及如何一步一步在ARM Mini2440上编写RTOS内核&#xff…

Spring之配置非自定义Bean

目录 一&#xff1a;概述 二&#xff1a;代码演示 1)配置Druid数据源交由Spring管理 一&#xff1a;概述 以上在xml中配置的Bean都是自己定义的&#xff0c; 例如&#xff1a;UserDaolmpl&#xff0c; UserServicelmpl。但是&#xff0c; 在实际开发中有些 功能类并不是我们…

包装器和绑定器std::bind和std::function的回调技术

回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。回调函数不是由该函数的实现方直接调用&#xff0c;而是在…

低代码搭建门店管理之收发货管理系统

随着电商的深入&#xff0c;不少门店都开始采用线上模式进行销售了&#xff0c;并且有的门店线上销售更是比线下销售更加火爆。因此&#xff0c;线上销售务必会涉及到收发货这个步骤。以前线上销售刚兴起的时候收发货只靠人工纸质化登记就能搞定&#xff0c;但是随着线上销售的…

盘点这些年稚晖君的DIY项目,看看他的技术栈有多强

近日&#xff0c;知名极客稚晖君在个人微博发文称自己将离职创业&#xff0c;开启一段新的旅程&#xff0c;“天才少年”将在机器人领域继续发光发热。 自2020年初发布第一个出圈视频《技术宅UP耗时三个月&#xff0c;自制B站最强小电视&#xff01;》以来&#xff0c;稚晖君共…

Vue实例的基本属性,computed计算属性,watch监听属性以及过滤器filters

目录 一、Vue实例的属性 二、Vue实例的计算属性&#xff1a;computed。计算属性结果会被缓存起来&#xff0c;当依赖的响应式属性发生变化时&#xff0c;才会重新计算&#xff0c;返回最终结果。 三、Vue实例的状态监听属性&#xff1a;watch&#xff0c;可以对元素的值的变…

JVM垃圾回收相关算法-垃圾标记阶段

文章目录学习资料垃圾回收概念概述垃圾回收相关算法垃圾标记阶段&#xff1a;对象存活判断引用计数算法可达性分析算法&#xff08;或根搜索算法、追踪性垃圾收集&#xff09;【Java使用算法】基本思路GC Roots对象的finalization机制对象处于三种可能的状态具体过程学习资料 …

WebDAV之葫芦儿·派盘+WebDAV Nav Lite

WebDAV Nav Lite 支持WebDAV方式连接葫芦儿派盘。 支持连接所有WebDAV服务器、云存储、NAS设备的管理工具,并可以直接管理设备内的文件?那快来试下WebDAV Nav Lite自动同步与管理工具吧。 WebDAV Nav Lite允许您

【Bootstrap】CSS全局样式

目录 一、HTML5文档类型 二、移动设备优先 三、禁用移动设备上的缩放功能 四、布局容器 1. container 类 ​2. container-fluid 类 五、标题 六、页面主体 七、文本 1. 内联文本元素 2. 文本对齐 ​3. 改变大小写 八、列表 1. 无序列表 2. 有序列表 3. 无样式列…