题目要求
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 must contain at least one node and does not need to go through the root.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6.
题目要求:从二叉树中找到任意两个节点构成的一条路径,该路径上节点的和为最大。
思路与代码
在这里和其它题目不一样的是,并非从根节点到叶节点的一条路径,而是从任意一个节点到任意一个节点的路径。其实在这里我们通过递归的方法可以发现以下几种场景:
1.当前节点作为起始节点
2.当前节点不是起始节点
首先我们以当前节点作为根节点,找到可能构成的最大路径值。也就是
1.根节点本身(如果根节点的左右子树的最大值均<=0)
2.根节点加上左子树
3.根节点加上右子树
其次,如果当前节点不是起始或结束节点,那么当前节点就如例题中所示的2
在递归中,我们需要先计算当前节点可能生成的最大路径值并与最大值比较,同时还要返回给父节点该节点作为根节点的最大路径值。
代码如下:
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxPathSumRec(root);
return max;
}
public int maxPathSumRec(TreeNode root){
if(root==null) return 0;
int left = maxPathSumRec(root.left);
int right = maxPathSumRec(root.right);
max = Math.max(Math.max(max, Math.max(left+root.val, right+root.val)), left+root.val+right);
return Math.max(left+root.val, right+root.val);
}
public static void main(String[] args){
BinaryTreeMaximumPathSum_124 b = new BinaryTreeMaximumPathSum_124();
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
t1.left = t2;
t1.right = t3;
b.maxPathSum(t1);
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。