【LeetCode热题100(47/100)】路径总和 III
题目地址:链接
思路: 通过前缀和 + 回溯,每次记录当前前缀和,每次记录当前离 targetSum 的偏移量, 统计当前满足条件的路径数量。
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @param {number} targetSum* @return {number}*/
var pathSum = function(root, targetSum) {let map = new Map();let ans = 0;function dfs(root, pre) {if(!root) return null;let ppre = pre + root.val;let check_num = ppre - targetSum; // 偏移量ans += map.get(check_num) || 0;map.set(ppre, map.get(ppre) + 1 || 1);dfs(root.left, ppre);dfs(root.right,ppre);map.set(ppre, map.get(ppre) - 1);}map.set(0, 1);dfs(root, 0);return ans;
};