JesseZhao1990/algorithm

路径总和 II

JesseZhao1990 opened this issue · 0 comments

image

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} sum
 * @return {number[][]}
 */
var pathSum = function(root, sum) {
    function loop(root,sum){
        var res = [];
        if(root === null) return res;

        if(root.left === null && root.right === null){
            res.push({currentSum:root.val,arr:[root.val]})
            return res;
        }

        var leftRes = loop(root.left,sum);
        for(var i=0;i<leftRes.length;i++){
            var currentSum = leftRes[i].currentSum+root.val;  
            leftRes[i].arr.splice(0,0,root.val)
            res.push({currentSum:currentSum,arr:leftRes[i].arr})
        }

        var rightRes = loop(root.right,sum);
        for(var i=0;i<rightRes.length;i++){
            var currentSum = rightRes[i].currentSum + root.val;
            rightRes[i].arr.splice(0,0,root.val);
            res.push({currentSum:currentSum,arr:rightRes[i].arr})
        }

        return res;
    }
    
    return loop(root,sum)
    .filter(item=>{
        return item.currentSum === sum
    })
    .map(item=>item.arr);
    
};

解题思路:递归调用。计算一个节点左子树的字符串数组,和右子树的字符串数组,并和本节点的值串联起来,记录累加的值。

leetcode 原题地址:https://leetcode-cn.com/problems/path-sum-ii/description/