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]
]
Solution :
The idea is to use DFS. If in a path from root to a leaf the sum is found, the path
is entered into a result vector. If not, we backtrack and look for other paths.
Code :
Do comment and share!
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]
]
Solution :
The idea is to use DFS. If in a path from root to a leaf the sum is found, the path
is entered into a result vector. If not, we backtrack and look for other paths.
Code :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
vector<vector<int> > pathSum(TreeNode *root, int sum) { | |
vector<vector<int>> vec; | |
vector<int> ivec; | |
findSumPath (root, sum, vec, ivec); | |
return vec; | |
} | |
public: | |
void findSumPath (TreeNode *root, int sum, vector<vector<int>> &vec, vector<int> &ivec) { | |
if(!root) return; | |
ivec.push_back(root->val); | |
if(root->left == NULL && root->right== NULL && sum == root->val) | |
{ | |
vec.push_back(ivec); | |
ivec.pop_back(); | |
return; | |
} | |
if (root->left) findSumPath(root->left, sum-root->val, vec, ivec); | |
if (root->right) findSumPath(root->right, sum-root->val, vec, ivec); | |
ivec.pop_back(); | |
} | |
}; |
Do comment and share!