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

原创 2015年07月08日 16:23:48

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);
		}
		// divide
		ResType left = helper(root.left);
		ResType right = helper(root.right);
		//conquer
		int 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




20150708 lintcode 总结 Binary Search Tree Iterator

Binary Search Tree Iterator Design an iterator over a binary search tree with the following rul...

20150708 lintcode 总结 Minimum Path Sum

Easy Minimum Path Sum Show result  34% Accepted Given a m x n grid filled with...

Binary Tree Maximum Path Sum 求二叉树的最大路径和

题目描述 Given a binary tree, find the maximum path sum. The path may start and end at any node in ...

Leetcoe Binary Tree Maximum Path Sum

之前觉得这个是难得一塌糊涂的题目,为五星级难度。 但是自从熟悉了递归回溯,树的遍历,二分法这些相关的算法之后,重新思考一下这道题目。 觉得难度也不过如此,重新评为3到4星级吧。 关键点: 1 每个节点...

LeetCode:Binary Tree Maximum Path Sum

Binary Tree Maximum Path Sum 题目描述:
  • bbppbb
  • bbppbb
  • 2014年07月30日 12:33
  • 523

Binary Tree Maximum Path Sum--LeetCode

题目: Given a binary tree, find the maximum path sum. The path may start and end at any node in the...

[LeetCode] Binary Tree Maximum Path Sum

Given a binary tree, find the maximum pathsum. The path may start and end at any node inthe tree. ...

Leetcode 124. Binary Tree Maximum Path Sum[hard]

题目: Given a binary tree, find the maximum path sum.For this problem, a path is defined as any seque...

leetcode-124:Binary Tree Maximum Path Sum(Java)

Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may st...

leetcode解题之124. Binary Tree Maximum Path Sum Java版 (二叉树的最大路径和)

124. Binary Tree Maximum Path Sum ,leetcode解题之124. Binary Tree Maximum Path Sum Java版 (二叉树的最大路径和)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:20150708 lintcode 总结 Binary Tree Maximum Path Sum Show result *****
举报原因:
原因补充:

(最多只允许输入30个字)