20150708 lintcode 总结 Binary Tree Maximum Path Sum Show result *****

来源:互联网 发布:淘宝物流怎么设置 编辑:程序博客网 时间:2024/05/18 17:42

Medium Binary Tree Maximum Path Sum

23%
Accepted

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.

虽然是中等题,卡了好久好久好久好久


/** * 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 {private class ResType{private int singlePath, maxPath;public ResType(int singlePath, int maxPath){this.singlePath = singlePath;this.maxPath = maxPath;}};  private ResType helper(TreeNode root){if(root == null){return new ResType(0, Integer.MIN_VALUE);}// divideResType left = helper(root.left);ResType right = helper(root.right);//conquerint singlePath = Math.max(left.singlePath, right.singlePath)+root.val;singlePath = Math.max(singlePath, 0);         //very important !!!int maxPath = Math.max(left.maxPath, right.maxPath);maxPath = Math.max(maxPath, left.singlePath+right.singlePath+root.val);return new ResType(singlePath, maxPath);}  /**     * @param root: The root of binary tree.     * @return: An integer.     */    public int maxPathSum(TreeNode root) {        // write your code here     ResType res = helper(root);     return res.maxPath;    }}


定义两个值 singlePath 和 maxPath:

1. singlePath是从root到左子树或右子树任一node的 最大path sum, 如果singlePath是负数, 就强制设其为0,等于parent计算时不再考虑此root为根的tree的singlePath。

2. maxPath是root 树中最大的 path sum,可以不经过 root。

把这两个值放在一个返回类型类ResType内。

最大的 path sum 有两种情况:

1.  经过 root: left.singlePath + root.val + right.singlePath

2. 不经过 root:  Math.max(left.maxPath, right.maxPath); 


比较麻烦的是每个node 的val可以是负数, 当 root == null 时, singlePath =0 , maxPath = Integer.MIN_VALUE




0 0