int pathsum(TreeNode *root){
     if (!root)  return 0;
     int left = pathsum(root->left);
     int right = pathsum(root->right);
     
     if (left + root->val + right > result)
         result = left + root->val + right;
         
     int val = (left > right ? left : right) + root->val;
     return val > 0 ? val : 0;
 }
 void pathsum(TreeNode *root, int sum, int &result){
     if (root->left == NULL && root->right == NULL){
         sum *= 10;
         sum += root->val;
         result += sum;
         return;
     }
     if (root->left != NULL){
         pathsum(root->left,sum*10+root->val,result);
     }
     if (root->right != NULL){
        pathsum(root->right,sum*10+root->val,result); 
     }
     
 }
 int maxPathSum(TreeNode *root) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     result = INT_MIN;
     pathsum(root);
     return result;
 }
 int sumNumbers(TreeNode *root) {
     int result = 0;
     if(root == NULL){
         return result;
     }
     pathsum(root,0,result);
     return result;
 }
Пример #5
0
 int maxPathSum(TreeNode* root) {
     int res=INT_MIN;
     
     // a root started subtree max
     pathsum(root,res);
     
     return res;
 }
Пример #6
0
 int pathsum(TreeNode *root, int &res){
     if(root==NULL){
         return 0;
     }
     int lmax=pathsum(root->left,res);
     int rmax=pathsum(root->right,res);
     
     int sum=root->val;
     if(lmax>0){
         sum+=lmax;
     }
     
     if(rmax>0){
         sum+=rmax;
     }
     
     res=max(res,sum);
     
     if(lmax<0 && rmax <0){
         return root->val;
     }else{
         return max(lmax,rmax)+root->val;
     }
 }