题目链接:https://leetcode.com/problems/path-sum-ii/#/description
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum
= 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
class Solution{
public:
vector<vector<int>> pathSum(TreeNode* root,int sum)
{
vector<vector<int>> res;
vector<int> tmp;
dfs(res,tmp,root,sum);
return res;
}
void dfs(vector<vector<int>>& res,vector<int> tmp,TreeNode* root,int sum)
{
if(root==NULL)
return;
tmp.push_back(root->val);
sum-=root->val;
if(sum==0 && root->left==NULL && root->right==NULL)
{
res.push_back(tmp);
return;
}
if (root->left)
dfs(res,tmp,root->left,sum);
if(root->right)
dfs(res,tmp,root->right,sum);
tmp.pop_back();
}
};
class Solution{
public:
vector<vector<int>> pathSum(TreeNode* root,int sum)
{
vector<vector<int>> res;
vector<int> tmp;
dp(res,tmp,root,sum);
return res;
}
void dp(vector<vector<int>>& res,vector<int> tmp,TreeNode*root,int sum)
{
if(!root)
return;
tmp.push_back(root->val);
if(!root->left && !root->right)
{
if(accumulate(tmp.begin(),tmp.end(),0)==sum)
res.push_back(tmp);
return;
}
dp(res,tmp,root->left,sum);
dp(res,tmp,root->right,sum);
}
};