您的位置:首页 > 其它

lintcode-medium-Binary Tree Maximum Path Sum

2016-03-15 06:29 274 查看
Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

Given the below binary tree:

1
/ \
2   3

return
6
.

一个二叉树的最大量路径,分三种情况:

1. 在左子树

2. 在右子树

3. 包括root,左子树一部分和右子树一部分

所以需要定义一个类,用来记录不同的情况,一个int用来记录左子树/右子树的最大值,一个int用来记录任何情况下的最大值

/**
* 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.
*/

class ResultType{
int singlePath;
int maxPath;

public ResultType(int singlePath, int maxPath){
this.singlePath = singlePath;
this.maxPath = maxPath;
}
}

public ResultType helper(TreeNode root){
if(root == null){
return new ResultType(0, Integer.MIN_VALUE);
}

ResultType left = helper(root.left);
ResultType right = helper(root.right);

int singlePath = Math.max(left.singlePath, right.singlePath) + root.val;
singlePath = Math.max(0, singlePath);

int maxPath = Math.max(left.maxPath, right.maxPath);
maxPath = Math.max(maxPath, left.singlePath + right.singlePath + root.val);

return new ResultType(singlePath, maxPath);
}

public int maxPathSum(TreeNode root) {
// write your code here
return helper(root).maxPath;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: