标签:hang width init 通过 ima dma oss 左右 com
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
Example
Given the below binary tree:
1
/ 2 3
return 6
.
总结:二叉树里起始点和终结点都任意的题目,其实可以考虑成接龙题。其实对于某个节点单独拎出来想的时候,选择还是有穷个的。1.自己;2.向左接龙;3.向右接龙;4.左右都接龙;(5.左边断long;6.右边断long)。类似题型里那个连续数字接龙的题目:就只有1, 2, 3, 4。http://www.cnblogs.com/jasminemzy/p/7666076.html
本题解析 :出处 http://www.cnblogs.com/yuzhangcmu/p/4172855.html
计算树的最长path有2种情况:
1. 通过根的path.
(1)如果左子树从左树根到任何一个Node的path大于零,可以链到root上
(2)如果右子树从右树根到任何一个Node的path大于零,可以链到root上
2. 不通过根的path. 这个可以取左子树及右子树的path的最大值。
所以创建一个inner class:
记录2个值:
1. 本树的最大path。(wholeMax)
2. 本树从根节点出发到任何一个节点的最大path. (linkedMax)
细节:用Integer.MIN_VALUE作为警示符的时候,不能让可能取到警示符的两个值相加,会溢出,有时候要用max(0, 可能是警示符的变量)来限制下,就是如果取到的是警示符,那就不要加了。见注释。
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /* * @param root: The root of binary tree. * @return: An integer */ private class ResultType{ public int wholeMax; public int linkedMax; public ResultType(int wholeMax, int linkedMax) { this.wholeMax = wholeMax; this.linkedMax = linkedMax; } } public int maxPathSum(TreeNode root) { // write your code here ResultType result = helper(root); return result.wholeMax; } private ResultType helper(TreeNode root) { if (root == null) { return new ResultType(Integer.MIN_VALUE, Integer.MIN_VALUE); } ResultType left = helper(root.left); ResultType right = helper(root.right); int linkedMax; int wholeMax; //千万小心因为你用的警示符是Integer.MIN_VALUE,所以你不能随便让答案加,要用0下限来限制,避免溢出。 //如 linkedMax = Math.max (root.val, root.val + left.linkedMax)看似逻辑通顺,但仔细看就发现可能产生溢出错误!! linkedMax = root.val + Math.max(Math.max(0, left.linkedMax), right.linkedMax); int cross = root.val; cross += Math.max(0, left.linkedMax); cross += Math.max(0, right.linkedMax); wholeMax = Math.max(linkedMax, cross); wholeMax = Math.max(wholeMax, left.wholeMax); wholeMax = Math.max(wholeMax, right.wholeMax); return new ResultType(wholeMax, linkedMax); } }
lintcode94- Binary Tree Maximum Path Sum- medium
标签:hang width init 通过 ima dma oss 左右 com
原文地址:http://www.cnblogs.com/jasminemzy/p/7675355.html