public class Solution {
private static int ans = Integer.MIN_VALUE;
/**
* 以这棵树为例:
2
/ \
1(黄) -1
/ \ / \
1 -3 1 7
图中红色路径表示的一条最大路径:
先看下递归过程:
以左下角的1为root的树的最大路径肯定是1,而异-3为root的树的最大路径是-3,以他俩的父节点1为根节点的最大路径有这么几种情况:
root.val, root.val + left , root.val + right ,root.val + left + right
取其中的最大值(图中的例子是root.val + left:2),更新max(上面取四个值得最大值,仅用于更新max)
但是这个递归函数的返回不应该包括root.val + left + right,因为黄底色的1作为2的左子树的返回值只能由其他节点经过黄底色的1,传到根节点2,单向,传到2,不能形成折路
*
*/
public int getMax(TreeNode root) {// 获取每个节点左右单颗树的最大值,同时更新结果最大值
if (root == null)
return 0;
else {
int leftValue = getMax(root.left);
int rightValue = getMax(root.right);
ans = Math.max(
ans,
Math.max(
Math.max(
Math.max(leftValue + root.val, rightValue
+ root.val), root.val), leftValue
+ rightValue + root.val));
return Math.max(
Math.max(leftValue + root.val, rightValue + root.val),
root.val);
}
}
public int maxPathSum(TreeNode root) {
if (root == null)
return 0;
getMax(root);
return ans;
}
}
【LeetCode】Binary Tree Maximum Path Sum
最新推荐文章于 2024-03-25 21:39:45 发布