抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一:题目描述:

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

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

二:示例与提示

示例 1:

image-20230803112427627

1
2
输入: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:

image-20230803112440064

1
2
输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

1
2
输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点的数目在范围 [0, 5000]
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

三:思路

深度优先搜索和回溯

  • 遍历每个节点的时候targetSum减去当前节点值,当遍历到叶子节点时候,如果targetSum为0,说明存在一条路径,满足该路径上的所有节点的和为targetSum
  • 终止条件是遍历到叶子节点时,是否targetSum为0,如果满足存在该路径就把path加入到res结果集中,不存在就return 返回
  • 如果不是叶子节点,递归调用,避免操作空指针,先判断是否存在左右子树,然后将该节点的val值加入到当前path路径中
  • 重要的是回溯,在递归调用之后,将该值从 “path” 数组中移除(回溯),以便探索其他路径。
  • “pathSum” 函数通过传入根节点、目标和减去根节点值(targetSum - root.val)以及初始路径(只包含根节点的值)来调用 “getPath” 函数。

四:代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number[][]}
*/


//路径总和
var pathSum = function(root, targetSum) {
//存放路径的结果集
let res = []
if(!root) return res
//单条路径
let path = [root.val]
const getPath = (root, targetSum, path) => {
//终止条件
//碰到叶子节点时候 才将路径加入res
if(!root.left && !root.right && targetSum === 0){
res.push([...path]);
// res.push(path)

}
//不为0 返回
if(!root.left && !root.right && !targetSum !== 0) {
return
}
//递归遍历
if(root.left) {
// 将节点加入到单条路径中
path.push(root.left.val)
//递归
getPath(root.left, targetSum - root.left.val, path)
//回溯
path.pop()
}
if(root.right) {
path.push(root.right.val)
//递归
getPath(root.right, targetSum - root.right.val, path)
path.pop()
}
// console.log(path)
return
}
getPath(root, targetSum - root.val, path)
// console.log(res)
return res

};

评论