/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution{privateMap<Long,Integer>cnt=newHashMap<>();privateinttarget;publicintpathSum(TreeNoderoot,intsum){cnt.put(0L,1);target=sum;returndfs(root,0);}privateintdfs(TreeNoderoot,longs){if(root==null){return0;}s+=root.val;intans=cnt.getOrDefault(s-target,0);cnt.merge(s,1,Integer::sum);ans+=dfs(root.left,s);ans+=dfs(root.right,s);cnt.merge(s,-1,Integer::sum);returnans;}}
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */classSolution{public:intpathSum(TreeNode*root,intsum){unordered_map<longlong,int>cnt{{0,1}};autodfs=[&](thisauto&&dfs,TreeNode*root,longlongs)->int{if(!root){return0;}s+=root->val;intans=cnt[s-sum];++cnt[s];ans+=dfs(root->left,s);ans+=dfs(root->right,s);--cnt[s];returnans;};returndfs(root,0);}};
1 2 3 4 5 6 7 8 910111213141516171819202122232425
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funcpathSum(root*TreeNode,sumint)int{cnt:=map[int]int{0:1}vardfsfunc(*TreeNode,int)intdfs=func(root*TreeNode,sint)int{ifroot==nil{return0}s+=root.Valans:=cnt[s-sum]cnt[s]++ans+=dfs(root.Left,s)ans+=dfs(root.Right,s)cnt[s]--returnans}returndfs(root,0)}
/** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public var right: TreeNode? * public init() { self.val = 0; self.left = nil; self.right = nil; } * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; } * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { * self.val = val * self.left = left * self.right = right * } * } */classSolution{funcpathSum(_root:TreeNode?,_sum:Int)->Int{varcnt:[Int:Int]=[0:1]funcdfs(_root:TreeNode?,_s:Int)->Int{guardletroot=rootelse{return0}vars=s+root.valvarans=cnt[s-sum,default:0]cnt[s,default:0]+=1ans+=dfs(root.left,s)ans+=dfs(root.right,s)cnt[s,default:0]-=1returnans}returndfs(root,0)}}