算法学习记录(九十八)

71 阅读1分钟

113. 路径总和 II

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

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

image.png

解:

  1. 思路比较简单,就是将之前走过的路径都用数组记录下,到叶节点的时候判断之前的累加和加上当前节点是否正确,正确就加入结果数组。
  2. 由于数组是引用类型值,所以需要在递归结束后将数组复原,否则会造成元素不停累加。
  3. 也可以用字符串来记录路径,不需要复原数组
const pathSum = function(root, targetSum) {
    const res = []
    function getRes(node, preNode, preSum) {
        if (!node) return
        preNode.push(node.val)
        preSum += node.val
        if (!node.left && !node.right && preSum === targetSum) {
            res.push([...preNode])
        }
        node.left && getRes(node.left, preNode, preSum)
        node.right && getRes(node.right, preNode, preSum)
        preNode.pop()
    }
    getRes(root, [], 0)
    return res
};