思路为:
建立一个一维路径数组A,在每次遍历一个节点的时候,放入路径数组A,并在targetSum减去当前节点的val,在每个节点左右节点遍历完之后吐出最后路径数组最后一个元素,并在targetSum上加上路径数组的val。在此过程中判断左右叶子节点为空且targetSum减去当前节点的值后为0,则将路径数组A,push到二维结果数组中。
class Solution {
public:
vector<int> path;
vector<vector<int>> ans;
public:
void dfs(TreeNode* root, int targetSum) {
if (root==nullptr) return;
targetSum -= root->val;
path.emplace_back(root->val);
auto left = root->left;
auto right = root->right;
if (!left && !right && targetSum==0) ans.emplace_back(path);
dfs(left, targetSum);
dfs(right, targetSum);
targetSum += path.back();
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
dfs(root, targetSum);
return ans;
}
};