124、二叉树中的最大路径和
二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次 。该路径 至少包含一个节点,且不一定经过根节点。
路径和是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。

class Solution {
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
helper(root);
return max;
}
public int helper(TreeNode node) {
if (node == null) {
return 0;
}
// 递归计算左右子节点的最大贡献值
// 只有在最大贡献值大于 0 时,才会选取对应子节点
int leftGain = Math.max(helper(node.left), 0);
int rightGain = Math.max(helper(node.right), 0);
// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
int sum = node.val + leftGain + rightGain;
// 更新答案
max = Math.max(max, sum);
// 返回节点的最大贡献值
return node.val + Math.max(leftGain, rightGain);
}
}
浙公网安备 33010602011771号