Maximum Path Sum Binary Tree I

Medium

Given a binary tree in which each node contains an integer number. Find the maximum possible sum from one leaf node to another leaf node. If there is no such path available, return Integer.MIN_VALUE(Java)/INT_MIN (C++).

Examples

-15

/ \

2 11

/ \

6 14

The maximum path sum is 6 + 11 + 14 = 31.

Solution:

To Parent: return root.key + max(left path, right path)

At Current: update globalMax against root.key + left path + right path

From Children: largest sum left path and largest sum right path

public class Solution {
  public int maxPathSum(TreeNode root) {
    int[] max = new int[]{Integer.MIN_VALUE};
    helper(root, max);
    return max[0];
  }

  private int helper(TreeNode root, int[] max){
    if (root == null){
      return 0;
    }

    if (root.right == null && root.left == null) {
      return root.key;
    } else if (root.right == null) {
      return helper(root.left, max) + root.key;
    } else if (root.left == null) {
      return helper(root.right, max) + root.key;
    } else {
      //case 4
      // from children
      // get best partial paths from left and right
      int bestLPath = helper(root.left, max);
      int bestRPath = helper(root.right, max);

      // at current
      // compare completeLocalPath to global maximum path
      int completeLocalPath = bestLPath + root.key + bestRPath;
      max[0] = Math.max(max[0], completeLocalPath);

      // to parent
      // pass up best partial path
      return Math.max(bestLPath, bestRPath) + root.key;
    }
  }
}

Mistakes Made:

problem constraint states a valid path must be from one leaf node to another. This means that we can only update the global maximum if we have both a left and right child

Last updated

Was this helpful?