-
Notifications
You must be signed in to change notification settings - Fork 0
/
Path_Sum_II.txt
54 lines (47 loc) · 1.57 KB
/
Path_Sum_II.txt
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
53
54
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:
Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
return
[
[5,4,11,2],
[5,8,4,5]
]
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > lists;
void pathSumHelper(TreeNode *root, int sum, vector<int> list){
if (root == NULL) return;
sum -= root->val;
list.push_back(root->val);
if (sum==0&&root->left==NULL&&root->right==NULL) lists.push_back(list);
pathSumHelper(root->left,sum,list);
pathSumHelper(root->right,sum,list);
}
vector<vector<int> > pathSum(TreeNode *root, int sum) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
lists.clear();
vector<int> list;
pathSumHelper(root,sum,list);
return lists;
}
};
REMARK:
1. Carefully read the problem: root-to-leaf, so we cannot stop anywhere, we must stop exactly at the leaf. NOTE: we make a global variable vector<vector<int> > lists and pay attention on how we construct the function void pathSumHelper(),in which we create vector list and pass it as parameter into the function pathSumHelper().
2. Time O(N) since we have to loop through all the nodes.