武汉网站建设模板如何制作/南京网站seo
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) {// 这里需要注意,要生成一个新的数组,而不是直接使用pathresult.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;
};