1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { private static class ResultHolder { private int maxPathSum = Integer.MIN_VALUE; }
public int maxPathSum(TreeNode root) { ResultHolder resultHolder = new ResultHolder(); dfs(resultHolder, root); return resultHolder.maxPathSum; }
private int dfs(ResultHolder resultHolder, TreeNode node) { if (node == null) { return 0; }
int maxLeftSum = Math.max(dfs(resultHolder, node.left), 0); int maxRightSum = Math.max(dfs(resultHolder, node.right), 0); resultHolder.maxPathSum = Math.max(resultHolder.maxPathSum, maxLeftSum + node.val + maxRightSum); return node.val + Math.max(maxLeftSum, maxRightSum); } }
|
References
124. Binary Tree Maximum Path Sum
剑指 Offer II 051. 节点之和最大的路径