leetcode113-路径总和II
leetcode 113
思路
本题可以参考:求二叉树的所有路径
方法是很相似的,只不过我们这里多了个条件,需要路径和等于目标值的才能作为结果加入,所以每次遍历需要传入目标值,最开始传入目标值,然后每到一个节点就减去这个节点的值,最终到叶子节点的时候,如果值为0,说明这条路径的和是等于目标值的,所以可以放入result中
需要特别注意⚠️的是:最终存放结果的时候不可以直接result.push(path) 因为后序还会对path进行操作,push或者pop操作都是直接在修改path,如果result这里直接push(path),那么这时候放入的是数组的地址,后面对path的更改都会影响到它,所以需要生成一个新的地址来存放,以免结果受影响
实现
var pathSum = function (root, targetSum) {
if (!root) return [];
let result = [];
const deep = (node, path, target) => {
const item = target - node.val;
path.push(node.val)
if (!node.left && !node.right) {
if (item === 0) {
// 这里需要注意,要生成一个新的数组,而不是直接使用path
result.push([...path])
}
}
if (node.left) {
deep(node.left, path, item)
path.pop()
}
if (node.right) {
deep(node.right, path, item)
path.pop()
}
}
deep(root, [], targetSum)
return result;
};