- 利用回溯的方法去做。
- 注意是到叶子节点。
- 注意如果路径相等没必要清楚path,因为是回溯会给清除的。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型vector<vector<>>
*/
vector<vector<int> > pathSum(TreeNode* root, int sum) {
// write code here
vector<vector<int>> results;
if(!root){
return results;
}
vector<int> path;
int sum_current = 0;
pre_order(root,path,results,sum_current,sum);
return results;
}
void pre_order(TreeNode* root, vector<int>& path,vector<vector<int> >& results,int sum,int target){
if(!root){
return;
}
sum += root->val;
path.push_back(root->val);
if(!root->left&&!root->right&&sum == target){
results.push_back(path);
}
pre_order(root->left,path,results,sum,target);
pre_order(root->right,path,results,sum,target);
sum-=root->val;
path.pop_back();
}
};