本文主要是介绍***Binary Tree Maximum Path Sum,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1/ \2 3
Return 6
.
不太明白什么意思!不会做!!!
http://www.programcreek.com/2013/02/leetcode-binary-tree-maximum-path-sum-java/
1) Recursively solve this problem
2) Get largest left sum and right sum
2) Compare to the stored maximum
参考代码:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
public class Solution {public int maxPathSum(TreeNode root) {int max[] = new int[1]; max[0] = Integer.MIN_VALUE;calculateSum(root, max);return max[0];}public int calculateSum(TreeNode root, int[] max) {if (root == null)return 0;int left = calculateSum(root.left, max);int right = calculateSum(root.right, max);int current = Math.max(root.val, Math.max(root.val + left, root.val + right));max[0] = Math.max(max[0], Math.max(current, left + root.val + right));return current;}
}
版本2:
http://blog.csdn.net/linhuanmars/article/details/22969069
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
public class Solution {public int maxPathSum(TreeNode root) {if(root==null)return 0;ArrayList<Integer> res = new ArrayList<Integer>();res.add(Integer.MIN_VALUE);helper(root,res);return res.get(0);}private int helper(TreeNode root, ArrayList<Integer> res){if(root == null)return 0;int left = helper(root.left, res);int right = helper(root.right, res);int cur = root.val + (left>0?left:0)+(right>0?right:0);if(cur>res.get(0))res.set(0,cur);return root.val+Math.max(left, Math.max(right,0));}
}
这篇关于***Binary Tree Maximum Path Sum的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!