题目

特别简单的一道题,但是我写了大半个小时了,刚开始一直通过99个案例,开始觉得是有重复遍历的,但是怎么都改不好,最后改好了,但是超时了,因为我当时为了查看测试数据,添加了好多数组,最后我把数组去掉后就不超时了。虽然执行时间有点长,但是毕竟也是写出来了。代码如下。

var pathSum = function(root, targetSum) {
    let idx = 0;
    let map = new Map();
    function dfs(root,targetSums){
        if(!root)return;
        if(targetSums===root.val){
            idx++;
        }
        const left = map.get(root.left);
        const right = map.get(root.right);
        if(!left){
            if(root.left)map.set(root.left,1);
            dfs(root.left,targetSum);
        }
        if(!right){
            if(root.right)map.set(root.right,1);
            dfs(root.right,targetSum);
        }
        dfs(root.left,targetSums-root.val);
        dfs(root.right,targetSums-root.val);
    }
    dfs(root,targetSum);
    return idx;
};