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] ]
This is a very elegant Solution:
1 class Solution { 2 public: 3 vector<vector<int> > solSet; 4 vector<int> sol; 5 void solve(TreeNode* root, int sum){ 6 if ( (root->left==NULL) && (root->right==NULL) && (sum-root->val==0) ) { 7 sol.push_back(root->val); 8 solSet.push_back(sol); 9 return; 10 } 11 sol.push_back(root->val); 12 if (root->left !=NULL){ 13 solve(root->left, sum-root->val); 14 sol.pop_back(); //记住需要pop_back 15 } 16 if (root->right!=NULL){ 17 solve(root->right, sum-root->val); 18 sol.pop_back(); 19 } 20 21 } 22 23 24 vector<vector<int> > pathSum(TreeNode *root, int sum) { 25 // Start typing your C/C++ solution below 26 // DO NOT write int main() function 27 sol.clear(); 28 solSet.clear(); 29 if (root==NULL) {return solSet;} 30 solve(root, sum); 31 return solSet; 32 } 33 };
This problem deserved to be rehacking