Thursday, July 31, 2014

Path Sum II

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 :

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();
}
};
view raw PathSumII hosted with ❤ by GitHub


Do comment and share!

No comments:

Post a Comment