哎这个题一个典型的dfs 但是不会标记路线的我还是不会 只能寻求解答 至少现在我会标记路线了
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void findpath(TreeNode* root,vector<int> path)
{
if(!root) return;
path.push_back(root->val);
findpath(root->left, path);
findpath(root->right,path);
path.pop_back();
}
还想了一会为什么要pop.back()。。。 因为走到这个节点的时候就已经把这个节点push back进入path了 为了不影响下一次的路径 必须把当前push过的pop掉 这样才可以保证每次走过这个节点时纪录的是从根节点到现在节点的路径然后知道这个之后 只需要在最后一步把path 放入 该返回的结果二维vector中就行了
class Solution {
private:
void findpath(TreeNode* root,int sum,vector<int> &path,vector<vector<int>> &res)
{
if(!root) return;
path.push_back(root->val);
if(root->val==sum&&!root->left&&!root->right)
res.push_back(path);
findpath(root->left, sum-root->val, path, res);
findpath(root->right, sum-root->val, path, res);
path.pop_back();
}
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> res;
vector<int> path;
findpath(root, sum,path,res);
return res;
}
};
学习了走路的问题