例子帮助理解题目意思
代码如下
深度优先遍历dfs
使用sum表示所到节点的和,将sum放入map数组中,如果sum一样则+1,默认是1
计算 sum - 目标值targetSum 如果能够在map中找到,则直接返回
var pathSum = function (root, targetSum) {
var map = new Map();
var res = 0;
dfs(root, 0);
return res;
function dfs(root, sum) {
if (!root) {
return 0;
}
map.set(sum, (map.get(sum) || 0) + 1);
var target = sum + root.val;
res += map.get(target - targetSum) || 0;
dfs(root.left, target);
dfs(root.right, target);
map.set(sum, map.get(sum) - 1);
}
};
代码调试一
var pre = map.get(target - targetSum);
if (pre) {
debugger;
}
res += pre || 0;
var obj1 = {
val: 10,
left: {
val: 5,
left: {
val: 3,
left: {
val: 3,
left: null,
right: null,
},
right: {
val: -2,
left: null,
right: null,
},
},
right: {
val: 2,
left: null,
right: {
val: 1,
left: null,
right: null,
},
},
},
right: {
val: -3,
left: null,
right: {
val: 11,
left: null,
right: null,
},
},
};
console.log(pathSum(obj1, 1));
代码调试二
var obj2 = {
val: 0,
left: {
val: 0,
left: {
val: 1,
left: null,
right: null,
},
right: {
val: 1,
left: null,
right: null,
},
},
right: {
val: 0,
left: {
val: 1,
left: null,
right: null,
},
right: null,
},
};
console.log(pathSum(obj2, 1));