刚开始并不知道temp.pop_back();用来干什么。当右子树遍历完成之后进行回退,回退的时候要删除当前遍历结点,保证temp里面的路径始终是从根节点出发的。否则路径就会有重复。
vector<vector<int>> res;
vector<int> temp;
void dfs(TreeNode* root, int sum){
if(root==nullptr)return;
temp.push_back(root->val);
sum=sum-root->val;
if(root->left==nullptr&&root->right==nullptr&&sum==0) res.push_back(temp);
dfs(root->left,sum);
dfs(root->right,sum);
temp.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
dfs(root,targetSum);
return res;
}