33-剑指 Offer 34. 二叉树中和为某一值的路径
创始人
2024-05-05 12:14:31
0

题目

给你二叉树的根节点 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> res;List tmp;public List> 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);}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...