Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1 / 2 3
Return 6
.
求最大路径。
就是记录两个结果。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int maxPathSum(TreeNode root) { if( root == null) return 0; long result[] = helper(root); return (int)Math.max(result[0], result[1]); } public long[] helper(TreeNode node){ long[] result = new long[2]; result[0] = Integer.MIN_VALUE; result[1] = Integer.MIN_VALUE; if( node == null ) return result; result[0] = node.val; result[1] = node.val; if( node.left == null && node.right == null) return result; long[] num1 = helper(node.left); long[] num2 = helper(node.right); result[0] = Math.max(Math.max(num1[0],num2[0])+node.val,node.val); result[1] = Math.max(Math.max(Math.max(Math.max(Math.max(num1[1],num2[1]),num1[0]+num2[0]+node.val),num1[0]+node.val), num2[0]+node.val),node.val); return result; } }