路径总和 II
路径总和 II
问题描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-ii
思路
深搜
- 当节点是叶子节点时,就不用向下继续搜索了。
- 非叶子节点,左右子树都遍历完以后,就将其从vector中弹出。
详细实现可以在题解中查看,很容易理解的。
题解
class Solution {
public:
vector<int> vec;
vector<vector<int>> ret;
void dfs(TreeNode *node, int sum, int target) {
if (node->left == nullptr && node->right== nullptr) {
vec.push_back(node->val);
sum+=node->val;
if (sum== target) {
ret.push_back(vec);
}
vec.pop_back();
return;
}
vec.push_back(node->val);
if(node->left!= nullptr)dfs(node->left, sum + node->val, target);
if(node->right!= nullptr) dfs(node->right, sum + node->val, target);
vec.pop_back();
}
vector<vector<int>> pathSum(TreeNode *root, int sum) {
if (root != nullptr) {
dfs(root, 0, sum);
}
return ret;
}
};