问题:
1.我怎么确保push的是正确的呢?再加一个vector
2.什么时候进行push,什么时候进行pop呢?用完只会就pop。
3.前序后序中序的特点。深度优先遍历是?前序遍历。
4.你怎么确定你会了呢?
5.没找到,必须pop掉!!!我也不太理解。
正文:
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
if(!root) return {};
vector<vector<int>> ans;
vector<int> cur;
pathSum(root, sum, cur, ans);
return ans;
}
private:
void pathSum(TreeNode* root, int sum, vector<int>& cur, vector<vector<int>>& ans){
if(!root) return;
if(!root->left && !root->right){
if(root->val == sum)
{
ans.push_back(cur);
//
ans.back().push_back(root->val);
}
// 不管有没找到就return
return;
}
// 前序遍历就是深度优先遍历,手写试试
cur.push_back(root->val);
int new_sum = sum - root->val;
pathSum(root->left, new_sum, cur, ans);
pathSum(root->right, new_sum, cur, ans);
// 回溯算法
cur.pop_back();
}
};
网友评论