递归+回溯:
class Solution {
private:
vector<int> path;
vector<vector<int>> result;
void traversal(TreeNode* root,int targetSum){
if(root->left==nullptr&&root->right==nullptr&&targetSum==0){
result.push_back(path);
return;
}
if(root->left==nullptr&&root->right==nullptr) return;
if(root->left) {
path.push_back(root->left->val);
targetSum=targetSum-root->left->val;
traversal(root->left,targetSum);
targetSum=targetSum+root->left->val;
path.pop_back();
}
if(root->right) {
path.push_back(root->right->val);
targetSum=targetSum-root->right->val;
traversal(root->right,targetSum);
targetSum=targetSum+root->right->val;
path.pop_back();
}
return;
}
public:
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
result.clear();
path.clear();
if(root==nullptr) return result;
path.push_back(root->val);
traversal(root,targetSum-root->val);
return result;
}
};
递归+回溯:
class Solution {
private:
vector<vector<int>> result;
void dfs(TreeNode* root,vector<int> path,int sum){
if(!root) return;
path.push_back(root->val);
if(!root->left&&!root->right&&sum==root->val){
result.push_back(path);
}
if(root->left) dfs(root->left,path,sum-root->val);
if(root->right) dfs(root->right,path,sum-root->val);
path.pop_back();
}
public:
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
vector<int> path;
dfs(root,path,targetSum);
return result;
}
};
递归+回溯:
class Solution {
private:
void dfs(TreeNode* root,vector<int> path,int sum,vector<vector<int>>& result){
if(!root) return;
path.push_back(root->val);
if(!root->left&&!root->right&&sum==root->val){
result.push_back(path);
}
if(root->left) dfs(root->left,path,sum-root->val,result);
if(root->right) dfs(root->right,path,sum-root->val,result);
path.pop_back();
}
public:
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
vector<int> path;
vector<vector<int>> result;
dfs(root,path,targetSum,result);
return result;
}
};