Monday, November 25, 2013

LeetCode Problem : Binary Tree Maximum Path Sum

Problem



Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

       1
      / \
     2   3
Return 6.

Code

int maxPathSumDFS(TreeNode *root,int& maxPathSum) {
    if(!root)
     return 0;
    int maxFromLeft = maxPathSumDFS(root->left,maxPathSum);
    int maxFromRight = maxPathSumDFS(root->right,maxPathSum);
    int maxVal = max(maxFromLeft,maxFromRight);
    int maxSum = root->val;
    if(maxFromLeft > 0)
     maxSum += maxFromLeft;
    if(maxFromRight > 0)
     maxSum += maxFromRight;
    if(maxPathSum < maxSum)
     maxPathSum = maxSum;
    if(maxVal > 0 && root->val > 0)
     return (maxVal + root->val);
    if(root->val > 0)
        return root->val;
    if((maxVal + root->val) > 0)
        return (maxVal + root->val);
    return 0;
}
int maxPathSum(TreeNode *root) {
    // IMPORTANT: Please reset any member data you declared, as
    // the same Solution instance will be reused for each test case.
    int maxPathSum = INT_MIN;
    maxPathSumDFS(root,maxPathSum);
    return maxPathSum;
}


No comments:

Post a Comment