path-sum 3

https://leetcode.com/problems/path-sum-iii/submissions/

 

题目:

 

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int count = 0;
    public int pathSum(TreeNode root, int sum) {
     //第2个integer是该值的频次 Map
<Integer,Integer> map = new HashMap<>(); //如果从root加到leaf正好= sum 就会命中 map.put(0,1); findAllNodeSum(root,0,sum,map); return count; } void findAllNodeSum(TreeNode root,int cursum,int target,Map<Integer,Integer> map){ if(root==null){ return ; } cursum = cursum +root.val; if(map.containsKey(cursum-target)){ count += map.get(cursum-target); } //判断是否以前节点的加现在的节点是否有符合要求的 if(!map.containsKey(cursum)){ map.put(cursum,1); }else{ map.put(cursum,map.get(cursum)+1); } //dfs findAllNodeSum(root.left,cursum,target,map); findAllNodeSum(root.right,cursum,target,map); //把当前叶子节点的和清掉 map.put(cursum,map.get(cursum)-1); } }

如下图涉及自身为target和从root-leaf等于target2种情况

从root到leaf相加等于target被统计到count中是因为0,1在map中

 

这种情况是当前节点与上面的局部节点相加等于target,这种情况被统计到count,是因为5当时在map中

posted @ 2019-12-22 20:15  会飞的企鹅吧  阅读(244)  评论(0编辑  收藏  举报