给出一棵二叉树,寻找一条路径使其路径和最大。
对于这个问题,路径被定义为从树中任意节点连接任意节点的序列。该路径必须至少包含一个节点,并且不需要经过根节点。
例如:
给出一棵二叉树:
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;
}
}