一、题目
二、思路
这道题和求二叉树所有路径的那道题相似
方法:dfs深度搜索
采用回溯
三、代码
class Solution {
private:
vector<vector<int>>res;
vector<int>ans;
int sum;
public:
vector<vector<int>> pathSum(TreeNode* root, int target) {
sum=0;
dfs(root,target,0);
return res;
}
void dfs(TreeNode* root, int &target,int sum){
if(root==nullptr){
return;
}
if(root->left==nullptr && root->right==nullptr){
ans.emplace_back(root->val);
if(sum+root->val==target){
res.emplace_back(ans);
}
ans.pop_back();
return;
}
if(root->left==nullptr && root->right!=nullptr){
ans.emplace_back(root->val);
dfs(root->right,target,sum+root->val);
ans.pop_back();
}
else if(root->left!=nullptr && root->right==nullptr){
ans.emplace_back(root->val);
dfs(root->left,target,sum+root->val);
ans.pop_back();
}
else{
ans.emplace_back(root->val);
dfs(root->left,target,sum+root->val);
dfs(root->right,target,sum+root->val);
ans.pop_back();
}
}
};