用时:20min

因为是求 ” 每个节点出发的为sum的路径”

很明显就想到了回溯,因为是二叉树,所以就双递归。

外层递归用来找到所有的节点,内层用来算节点的路径

var pathSum = function(root, sum) {
    var res = 0    var dfs = function (root,total,visited) {
        if (!root) return
        if (total + root.val == sum) {
            res++        } else if (total + root.val > sum) {
            return
        }
        dfs(root.left,total + root.val,[...visited,root.val])
        dfs(root.right,total + root.val,[...visited,root.val])
    }
    var dfs_outer = function (root) {
        if (!root )return
        root.left && dfs_outer(root.left)
        dfs(root,0,[])
        root.right && dfs_outer(root.right)
    }
    dfs_outer(root)
    return res
};