题解 | #牛群特殊路径的数量# DFS
牛群特殊路径的数量
https://www.nowcoder.com/practice/1c0f95d8396a432db07945d8fe51a4f5
知识点
DFS 树形DP 哈希表
思路
树中两点的路径和可以变成这两点到根节点的路径和的差值,我们构造一个dfs函数,来获取从根节点到达当前节点的路径总和,并用一个哈希表来维护已有的不同路径和的个数,那么以当前节点为较下面端点的贡献是mp[cur - sum]
计算完当前贡献后,把当前cur加入mp用于计算下面的节点。
由于DFS的性质可以保证mp里面存储的都是当前节点的祖先节点信息。
AC code(C++)
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <unordered_map>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param sum int整型
* @return int整型
*/
int pathSum(TreeNode* root, int sum) {
unordered_map<int, int> mp;
int res = 0;
function<void(TreeNode*, int)> dfs = [&](TreeNode* root, int cur) {
if (!root) return;
cur += root->val;
res += mp[cur - sum];
mp[cur] += 1;
dfs(root->left, cur);
dfs(root->right, cur);
mp[cur] -= 1;
};
mp[0] = 1;
dfs(root, 0);
return res;
}
};

查看11道真题和解析