【算法】【面试级】Hot100 124. 二叉树的最大路径和
分析
使用递归方法
主节点的最大和等于这个节点的值+左右节点最大和的最大值,往上递推
如果不准备往上递推,可以使用左最大和 +主的val + 右最大和
算法
//主函数
//1. 调用递归函数即可
//递归函数
//1. 递归
//2. 计算左右节点的最大和 若<0则归为0
//3. 将在这个节点停止时计算出的最大值和答案比较
//4. 返回左右节点最大和的较大值 + 主节点的val
//注意一个事情,ans最初应初始化为Integer.MIN_VALUE,应对root只有一个数 且是负数的情况
代码
class Solution {
private int ans = Integer.MIN_VALUE;
//主函数
public int maxPathSum(TreeNode root) {
//1. 调用递归函数即可
maxGain(root);
return ans;
}
//递归函数
private int maxGain(TreeNode root){
//0. 边界条件
if(root == null){
return 0;
}
//1. 递归
//2. 计算左右节点的最大和 若<0则归为0
int leftMax = Math.max(maxGain(root.left), 0);
int rightMax = Math.max(maxGain(root.right), 0);
//3. 将在这个节点停止时计算出的最大值和答案比较
ans = Math.max(leftMax + rightMax + root.val, ans);
//4. 返回左右节点最大和的较大值 + 主节点的val
return Math.max(leftMax, rightMax) + root.val;
}
}
浙公网安备 33010602011771号