题目简介:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
1 2 3 4
| [ [5,4,11,2], [5,8,4,5] ]
|
思路:
关于树的回溯题,其实和数组的差不多,需要注意的是结点的val
值可能为负的。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
class Solution { public:
vector<vector<int>> res;
void dfs(TreeNode* root, int sum, vector<int>& temp){
if(sum == 0 && !root -> left && !root -> right){
res.push_back(temp); return; } if(root -> left){
temp.push_back(root -> left -> val); dfs(root -> left, sum - root -> left -> val, temp); temp.pop_back(); } if(root -> right){
temp.push_back(root -> right -> val); dfs(root -> right, sum - root -> right -> val, temp); temp.pop_back(); }
}
vector<vector<int>> pathSum(TreeNode* root, int sum) { if(root == NULL) return{};
vector<int> temp;
temp.push_back(root -> val);
dfs(root, sum - root -> val, temp);
return res; } };
|