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 3Return 6.
先明确一下路径你给的定义:从根节点到树中某节点经过的分支。一共四种情况:
左子树的路径加上当前节点
右子树的路径加上当前节点
左右子树的路径加上当前节点(计算sum时需要考虑。计算path时,不考虑此情况。)
只有当前节点
public class Solution { /** * @param root: The root of binary tree. * @return: An integer. */ static int max = Integer.MIN_VALUE; //负值在路径上时没有关系,因为计算的是sum public int maxPathSum(TreeNode root) { helper(root); return max; } int helper(TreeNode root) { if(root == null) return 0; int res = root.val; int left = 0; int right = 0; if(root.left != null) { left = helper(root.left); if(left > 0) res += left; } if(root.right != null) { right = helper(root.right); if(right > 0) res += right; } if(res > max) max = res; return Math.max(root.val, Math.max(root.val + left, root.val + right)); } }