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

[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版 (二叉树的最大路径和)

Binary Tree Maximum Path Sum

递归求解二叉树的最大路径问题

[leetcode]124. Binary Tree Maximum Path Sum@Java解题报告

https://leetcode.com/problems/binary-tree-maximum-path-sum/discuss/ Given a binary tree, ...

Binary Tree Maximum Path Sum

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

Leetcode #124 Binary Tree Maximum Path Sum

Binary Tree Maximum Path Sum题目描述 给出一颗二叉树,每个树节点有一个整数权值。 现在要求从树上找出一条路径,使得权值之和最大,问这个最大权值之和是多少。算法分析 一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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