class Solution {
public:
vector<vector<int>> pathSum(TreeNode * root, int sum) {
vector<vector<int>> res;
vector<int> resElem;
helper(root, res, resElem, sum);
return res;
}
void helper(TreeNode *root, vector<vector<int>> &res, vector<int> &resElem, int sum){
if(root == NULL){
return;
}
if(root->left == NULL && root->right == NULL && sum == root->val){
resElem.push_back(root->val);
res.push_back(resElem);
resElem.pop_back(); //不能忘记把加入的pop出来啊,回溯里面,只要有push就得用pop,成对出现
return;
}
resElem.push_back(root->val);
helper(root->left, res, resElem, sum - root->val);
helper(root->right, res, resElem, sum - root->val);
resElem.pop_back();
return;
}
};
注意两种写法不同class Solution {
public:
vector<vector<int>> pathSum(TreeNode * root, int sum) {
vector<vector<int>> res;
vector<int> resElem;
helper(root, res, resElem, sum);
return res;
}
void helper(TreeNode *root, vector<vector<int>> &res, vector<int> &resElem, int sum){
if(root == NULL){
return;
}
resElem.push_back(root->val);
if(root->left == NULL && root->right == NULL && sum == root->val){
res.push_back(resElem);
}
helper(root->left, res, resElem, sum - root->val);
helper(root->right, res, resElem, sum - root->val);
resElem.pop_back();
return;
}
};
Comments
Post a Comment