给定一个定值和一个二叉树,要求返回路径之和等于定值的条数,可以不从头节点开始
struct TreeNode {int val;TreeNode *left;TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}};参考discuss
class Solution {
public:int help(TreeNode* root, int sum, unordered_map<int, int>& store, int pre) {if (!root) return 0;root->val += pre;int res = (root->val == sum) + (store.count(root->val - sum) ? store[root->val - sum] : 0);store[root->val]++;res += help(root->left, sum, store, root->val) + help(root->right, sum, store, root->val);store[root->val]--;return res;}int pathSum(TreeNode* root, int sum) {unordered_map<int, int> store;return help(root, sum, store, 0);}
};用关联容器记录从根节点开始到某个节点的权值之和,当有这样的路径出现时,用关联容器的关键值减去定值sum,差值必然会出现在关联容器中