面试算法-59-二叉树中的最大路径和

题目

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

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

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

示例 1:

输入:root = 1,2,3

输出:6

解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

java 复制代码
class Solution {
    public int maxPathSum(TreeNode root) {
        int[] max = { Integer.MIN_VALUE };
        dfs(root, max);
        return max[0];
    }

    public Integer dfs(TreeNode root, int[] max) {
        if (root == null) {
            return 0;
        }

        int[] maxLeft = { Integer.MIN_VALUE };
        int left = Math.max(0, dfs(root.left, maxLeft));
        int[] maxRight = { Integer.MIN_VALUE };
        int right = Math.max(0, dfs(root.right, maxRight));

        max[0] = Math.max(maxLeft[0], maxRight[0]);
        max[0] = Math.max(max[0], left + root.val + right);
        return Math.max(left, right) + root.val;
    }
}
相关推荐
Frostnova丶2 小时前
【算法笔记】数学知识
笔记·算法
吴可可1233 小时前
AutoCAD 2016与2014二次开发关键差异
算法
雨白4 小时前
哈希:以时间换空间的算法实战
算法
Cosolar4 小时前
LlamaIndex 文档解析与分块策略深度解析
人工智能·面试·架构
San813_LDD6 小时前
[数据结构]LeetCode学习
数据结构·算法·图论
x138702859576 小时前
c语言排雷游戏(基础版9*9)
c语言·算法·游戏
kyriewen6 小时前
我读了一遍 Babel 编译后的 async/await,终于搞懂了它的原理(附 20 行手写实现)
前端·javascript·面试
sheeta19987 小时前
LeetCode 每日一题笔记 日期:2026.06.06 题目:2196. 根据描述创建二叉树
笔记·算法·leetcode
小欣加油7 小时前
leetcode994 腐烂的橘子
数据结构·c++·算法·leetcode·bfs