Keshawn_lu's Blog

Leetcode 113. 路径总和 II

字数统计: 306阅读时长: 1 min
2020/09/26 Share

题目简介:

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

示例:
给定如下二叉树,以及目标和 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
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
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;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: