电影网站如何优化,织梦,权重查询站长工具,网站建设大作业有代码标签#xff1a;前缀和
问题#xff1a;给定一个二叉树的根节点 root #xff0c;和一个整数 targetSum #xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始#xff0c;也不需要在叶子节点结束#xff0c;但是路径方向必须是向下…标签前缀和
问题给定一个二叉树的根节点 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
提示:
二叉树的节点个数的范围是 [0,1000]-10^9 Node.val 10^9 -1000 targetSum 1000
思路思路类似于560.和为K的子数组leetcode560.和为k的子数组-CSDN博客利用前缀和的思想 。 注意的一点是 传入给左右子节点的sum和map应该是相同的 据说面试官要求必须要使用前缀和思想 int pathSum0;MapLong,Integer mapnew HashMap(); // 和可能超过public int pathSum(TreeNode root, int targetSum) {map.put((long)0,1);return help(root,(long)0,targetSum,map);}public int help(TreeNode root,long sum,int targetSum,MapLong,Integer map){if(rootnull)return pathSum;//------------------------和560一毛一样-----------------------sumroot.val;if(map.containsKey(sum-targetSum))pathSummap.get(sum-targetSum);if(map.containsKey(sum)){map.put(sum,map.get(sum)1);}elsemap.put(sum,1);//------------------------和560一毛一样-----------------------// 维护数值使传入左右子树的sum和map一样不维护则是把左子树遍历结果sum和map传到右子树Long tempsum;MapLong, Integer newMap new HashMap(map);help(root.left,temp,targetSum,map);help(root.right,temp,targetSum,newMap);return pathSum;}