/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
unordered_map<int, int> preSum;
void dfs(TreeNode* root, int sum, int cur, int& res) {
if (root == nullptr) return;
cur += root->val;
if (preSum.count(cur - sum)) res += preSum[cur - sum];
preSum[cur]++;
dfs(root->left, sum, cur, res);
dfs(root->right, sum, cur, res);
preSum[cur]--;
cur -= root->val;
}
int pathSum(TreeNode* root, int targetSum) {
int res = 0;
preSum[0] = 1;
dfs(root, targetSum, 0, res);
return res;
}
};
Leetcode 437.路径综合III
最新推荐文章于 2024-08-20 21:58:37 发布
这是一个关于二叉树遍历的问题,使用了深度优先搜索(DFS)策略来解决。给定一个二叉树和一个目标和,算法计算从根节点到叶子节点的所有路径之和等于目标和的路径数量。主要涉及的数据结构包括二叉树节点和哈希映射,通过递归地遍历树的节点,更新中间和的计数。
摘要由CSDN通过智能技术生成