题目描述
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return6.
我们递归计算通过每个节点的最大路径和 ( left + right + val), 与通过该节点的最大子路径的分支(max(left, right) + val), 每次更新一下最大路径和就可以了。
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
int maxValue;
public int maxPathSum(TreeNode root) {
maxValue = Integer.MIN_VALUE;
maxPath(root);
return maxValue;
}
public int maxPath(TreeNode node){
if(node == null)
return 0;
int left = Math.max(0, maxPath(node.left));
int right = Math.max(0, maxPath(node.right));
maxValue = Math.max(maxValue, left+right+node.val);
return Math.max(left, right)+node.val;
}
}
maxValue存放每个节点最大路径和。maxPath()返回的是通过该节点的最大子路径。