Qestion
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, (the node.val may < 0)
1 / 2 3
/ \
4 5
Return 11.
Analysis
get leftMax, rightMax, then compare the root , root + left, root + right and (left + root + right)
Code
public int maxPathSum(TreeNode root) { int max = Integer.MIN_VALUE; calculateSum(root, max); return max; } public int calculateSum(TreeNode root, int max) { if (root == null) return 0; int left = calculateSum(root.left, max); int right = calculateSum(root.right, max); int current = Math.max(root.val, Math.max(root.val + left, root.val + right)); // current path which can be added to another root max = Math.max(max, Math.max(current, left + root.val + right)); return current; // Notice here we return the legal path, not max, or we will get the sum of not a path. }
8.10 [LeetCode] 173 Binary Tree Maximum Path Sum
原文:http://www.cnblogs.com/michael-du/p/4719863.html