题目
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和
思路
可以看出,是一个向上递归的过程
对于二叉树中的一个节点,该节点的最大路径和取决于该节点的值与该节点的左右节点的最大路径和(递归得出的),如果子节点的最大路径和为正,则计入该节点的最大路径和,不断递归更新…
java代码如下:
class Solution {
int maxSum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root){
maxGain(root);
return maxSum;
}
public int maxGain(TreeNode node){
if(node == null){
return 0;
}
// 递归计算左右子节点的最大路径和
// 只有在最大路径和大于 0 时,才会选取对应子节点
int leftGain = Math.max(maxGain(node.left), 0);
int rightGain = Math.max(maxGain(node.right), 0);
// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大路径和
int newPath = node.val + leftGain + rightGain;
//更新答案
maxSum = Math.max(maxSum,newPath);
//返回节点的最大路径和
return node.val + Math.max(leftGain,rightGain);
}
}