给出一棵二叉树,寻找一条路径使其路径和最大。

对于这个问题,路径被定义为从树中任意节点连接任意节点的序列。该路径必须至少包含一个节点,并且不需要经过根节点。

例如:

给出一棵二叉树:

       1

      / \

     2   3

返回 6。

详见:https://leetcode.com/problems/binary-tree-maximum-path-sum/description/

Java实现:



/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int maxSum=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
helper(root);
return maxSum;
}

public int helper(TreeNode root){
if(root==null){
return 0;
}
int left = helper(root.left);
int right = helper(root.right);
int res = Math.max(root.val,Math.max(root.val+left, root.val+right));

maxSum = Math.max(maxSum,Math.max(res,root.val+left+right));

return res;
}
}