주어진 트리에서 root부터 leaf까지 path중에 합이 targetSum 과 같은 경우는 총 몇개인가 (root부터 시작될 필요 없음)
Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are shown.
https://leetcode.com/problems/path-sum-iii/
-10^9 <= Node.val <= 10^9
이기 때문에 newsum이 int
면 overflow가 발생할수 있다. 따라서 long int
로. (실수 한 부분)class Solution {
int count;
unordered_map<long int, int> freq;
public:
void dfs(TreeNode* root, int tgt, long int sum) {
if (root == NULL)
return;
long int newsum = sum + root->val;
if (freq.find(newsum - tgt) != freq.end()) {
count += freq[newsum - tgt];
}
freq[newsum]++;
dfs(root->left, tgt, newsum);
dfs(root->right, tgt, newsum);
freq[newsum]--;
}
int pathSum(TreeNode* root, int targetSum) {
freq[0] = 1;
dfs(root, targetSum, 0);
return count;
}
};