124 二叉树中的最大路径和

又是一个hard题目,其实我大概有想到要去dfs遍历节点,当时不知道怎么从一个叶子结点开始遍历。其实只需要从根节点出发,看看左右节点加在一起是否最大能不能作为一个路径,但是对外这是要不左节点上来要不右节点上来,不能两个结点都上来要不然会重复

题目

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和

示例 1:

ini 复制代码
输入: root = [1,2,3]
输出: 6
解释: 最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

代码与解析

代码上有注释,详细的思路解答

java 复制代码
class Solution {
    int maxSum = Integer.MIN_VALUE; // 用于记录最大路径和

    /**
     * 计算二叉树中任意节点的最大路径和
     * @param root 给定的二叉树根节点
     * @return 返回最大路径和
     */
    public int maxPathSum(TreeNode root) {
        // 如果树只有一个节点,则直接返回该节点的值
        if(root.left == null && root.right == null) return root.val;

        // 调用深度优先搜索方法
        dfs(root);

        return maxSum;
    }

    /**
     * 深度优先搜索计算路径和
     * @param node 当前节点
     * @return 返回当前节点向下路径和的最大值
     */
    public int dfs(TreeNode node) {
        if(node == null) return 0; // 空节点返回0

        int l = Math.max(dfs(node.left), 0); // 左子树提供的最大路径和,负值设为0
        int r = Math.max(dfs(node.right), 0); // 右子树提供的最大路径和,负值设为0

        int innerMax = l + r + node.val; // 当前子树内部的最大路径和
        maxSum = Math.max(maxSum, innerMax); // 更新最大路径和

        int outSum = node.val + Math.max(0, Math.max(l, r)); // 当前节点向上提供的最大路径和
        return outSum < 0 ? 0 : outSum; // 若对外提供的路径和为负,返回0;否则返回路径和
    }
}
相关推荐
zopple3 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001115 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本6 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34166 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan6 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer8 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3568 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3568 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer8 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP9 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪