Skip to content

Instantly share code, notes, and snippets.

@mountop
Last active August 29, 2015 14:00
Path Sum I
bool hasPathSum(TreeNode *root, int sum) {
return hasPathSumRe(root, 0, sum);
}
bool hasPathSumRe(TreeNode *root, int value, int sum) {
if(!root) return false;
if(!root->left && !root->right){
if((value+root->val) == sum)
return true;
else return false;
}
else return hasPathSumRe(root->left, root->val + value, sum)||hasPathSumRe(root->right, root->val + value, sum);
}
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
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<vector<int>> res;
vector<int> onePossibleSol;
pathSumRe(root, 0, sum, onePossibleSol, res);
return res;
}
void pathSumRe(TreeNode *root, int value, int sum, vector<int> oneSol, vector<vector<int>> &res) {
if(!root) return;
if(!root->left && !root->right){
if((value+root->val) == sum){
oneSol.push_back(root->val);
res.push_back(oneSol);
}
else return ;
}
oneSol.push_back(root->val);
pathSumRe(root->left, root->val + value, sum, oneSol, res);
pathSumRe(root->right, root->val + value, sum, oneSol, res);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment