一、题目
二、思路
1、前序遍历,传入根节点,目标值,和
2、先添加路径的值到vector容器中,判断节点的左子树和右子树以及和是否等于目标值,等于则把vector容器添加到输出结果当中
3、遍历左子树,遍历右子树
4、最后vector容器删除最后一个数
三、代码
class Solution {
public:
vector<int>res;
vector<vector<int>>ans;
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
int sum=0;
dfs(root,targetSum,sum);
return ans;
}
int dfs(TreeNode* root, int targetSum,int sum)
{
if(root==nullptr)
{
return 0;
}
res.emplace_back(root->val);
sum+=root->val;
if(root->left ==nullptr && root->right==nullptr &&sum==targetSum)
{
ans.emplace_back(res);
}
dfs(root->left,targetSum,sum);
dfs(root->right,targetSum,sum);
res.pop_back();
return root->val;
}
};