点击打开链接
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
void temp(TreeNode* Node, int sum, int curSum, vector<TreeNode*>& out, int& res)
{
if(!Node) return; //递归的结束条件
curSum += Node->val; //当前路径的总和
out.push_back(Node);
if(curSum == sum) res+=1; //当前路径总和=sum
int t = curSum;
for(int i=0;i<out.size()-1; i++){ //当前路径中查找子路径和=sum
t -= out[i]->val;
if(t==sum)
res +=1;
}
temp(Node->left, sum, curSum, out, res);
temp(Node->right, sum, curSum, out, res);
out.pop_back(); //当前节点为叶子节点,弹出当前叶子节点,退回其父子节点
}
int pathSum(TreeNode* root, int sum) {
int res = 0;
vector<TreeNode*> out;
temp(root, sum, 0, out, res);
return res;
}
};