给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
示例 1:
输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。
示例 2:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:3
/*** 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) {// 前缀和,递归方式,KEY存前缀和,VAL存前缀和数量const map = new Map();let res = 0;dfs(root, 0,)return res;function dfs(root, presum) {if (!root) return 0;map.set(presum, (map.get(presum) || 0) + 1);let target = presum + root.val;// 公共路径为当前节点和另一节点的差res += (map.get(target - targetSum) || 0);dfs(root.left, target);dfs(root.right, target);// 后序遍历,回溯,路径方向必须是向下map.set(presum, map.get(presum) - 1)}};

