void sumHelper(TreeNode *root,int psum) { if(root == NULL) { return; } psum = 10 * psum + root->val; if(root->left == NULL && root->right == NULL) { sum += psum; } if(root->left != NULL) { sumHelper(root->left,psum); } if(root->right != NULL) { sumHelper(root->right,psum); } }
vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > result; vector<int> com; if(candidates.empty()) return result; sort(candidates.begin(), candidates.end()); sumHelper(candidates, target, result, com, 0, 0); return result; }
void sumHelper(vector<int> &candidates, int target, vector<vector<int> > &result, vector<int> &com, int sum, int k) { if(sum > target) return; else if(sum == target) result.push_back(com); else { for(int i = k; i < candidates.size(); ++i) { com.push_back(candidates[i]); sumHelper(candidates, target, result, com, sum+candidates[i], i); com.pop_back(); } } }
int sumNumbers(TreeNode *root) { sum = 0; sumHelper(root,0); return sum; }