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; }
int maxPathSum(TreeNode* root) { int res=INT_MIN; // a root started subtree max pathsum(root,res); return res; }
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; } }