LeetCode:124二叉树中的最大路径和

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //记录最终的最大路径和,初始为极小值,防范全树都为负数的情况
    int maxSum = Integer.MIN_VALUE;
        
    public int maxPathSum(TreeNode root) {
        calculateSinglePath(root);
        return maxSum;
    }
    //计算当前节点能为父节点提供的最大路径和
    private int calculateSinglePath(TreeNode node){
        if(node == null){
            return 0;
        }
        //递归计算左右子树
        int leftProfit = Math.max(0,calculateSinglePath(node.left));
        int rightProfit = Math.max(0,calculateSinglePath(node.right));
        //倒V型的内部和
        int currentInternalSum = leftProfit + node.val + rightProfit;

        maxSum = Math.max(maxSum, currentInternalSum);

        return node.val + Math.max(leftProfit,rightProfit);
    }
}

maxSum用于记录全局最终的最大值;而函数返回值用于记录局部最大值,往上传递给父节点

相关推荐
致Great6 小时前
Pi 的上下文压缩,到底是怎么工作的?
算法
St_rive7 小时前
Page Object设计模式
java·开发语言·设计模式
wuyk5557 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
watersink7 小时前
机器学习聚类算法
算法·机器学习·聚类
风流 少年7 小时前
Spring AI 2.0:SSE
java·人工智能·spring
凤山老林8 小时前
精细化流量治理:Spring Boot 动态特性开关与灰度发布体系
java·spring boot·后端
luj_17688 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
饼饼学习空间智能10 小时前
家庭服务机器人训练数据怎么积累?仿真、真实采集与持续学习的技术路线分析
人工智能·算法·机器学习
Aphelios38010 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽