(Java)leetcode-124 Binary Tree Maximum Path Sum(二叉树中的最大路径和)

2023-10-28

更多LeetCode题解,可移步我的解题记录,持续更新中~

题目描述

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:

输入: [1,2,3]

       1
      / \
     2   3

输出: 6
示例 2:

输入: [-10,9,20,null,null,15,7]

   -10
   / \
  9  20
    /  \
   15   7

输出: 42

思路

每个节点都有一条经过自己的最大路径,我们遍历整棵树,并且比较所有节点的最大路径的和,其中的最大值,就是整棵树的最大路径。

经过某节点的最大路径和 = 本身 + 最大左枝 + 最大右枝
见下图,经过节点20的最大路径为 15 - 20 - 7 - 7

如果最大左枝或最大右枝的和为负数,那么它们对最大路径毫无贡献,需要将它们视为0。如下图的节点15,它的最大左枝为-3,那么将其视为0。
在这里插入图片描述
由于求一个节点的路径和,需要知道其孩子节点的情况,因此遍历的策略采用后序遍历

先求递归求最大左枝与最大右枝,然后通过经过某节点的最大路径和 = 本身 + 最大左枝 + 最大右枝这个关系求出该节点的最大路径和,并且更新整棵树的最大值。

递归的返回值很重要,应该是 本身 + 左右枝中的较大值, 这样才能组成一条较大的枝供上层父节点调用。
如上图,对于节点-10来说,求它的最大右枝时,应该返回的是节点20 + 20的最大右枝,组成了20 - 7 - 7

时间复杂度 O(n)
空间复杂度 O(n)

代码

class Solution {
	int max = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
    	maxPath(root);
    	return max;
    }

    private int maxPath(TreeNode root) {
    	if (root == null) return 0;

    	// 求最大左枝
    	int left = maxPath(root.left);
        if (left < 0) left = 0;

       	// 求最大右枝
    	int right = maxPath(root.right);
    	if (right < 0) right = 0;


    	// 求经过此节点的最大路径 = 本身 + 最大左枝 + 最大右枝
    	int sum = left + right + root.val;
    	// 更新整棵树的最大路径和
    	max = sum > max ? sum : max;

    	// 返回上层: 较长的枝 + 本身
    	return Math.max(left, right) + root.val;
    }
}

执行用时:1 ms, 在所有 Java 提交中击败了99.74%的用户
内存消耗:41.8 MB, 在所有 Java 提交中击败了7.69%的用户

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Java)leetcode-124 Binary Tree Maximum Path Sum(二叉树中的最大路径和) 的相关文章

随机推荐

  • 解决fiddler抓不到浏览器包的问题

    这里写自定义目录标题 解决fiddler抓不到浏览器包的问题 安装fiddler 简单介绍fiddler的工作原理 解决fiddler抓不到包的方法 解决fiddler抓不到浏览器包的问题 不管是对于开发还是测试同学 fiddler抓包都是
  • 1 CentOS7通过定时脚本阻断异常IP连接SSH(实测)

    需求 由于业务需要将Linux服务器映射到公网访问 SSH 端口已经修改 但还是发现有很多IP进行暴力破解 尝试将异常IP阻止非法访问 实现方式 SSH黑名单 Firewalld防火墙添加drop规则 原理 通过定时脚本检查系统登录失败日志
  • 黑白滤镜 ie专用

    最近网站要求黑白的频率变多了 html filter progid DXImageTransform Microsoft BasicImage grayscale 1
  • Python 读取文件首行多了"\ufeff"字符串

    问题背景 python读取B txt文件时 控制台打印首行正常 但是若是用首行内容打开文本的话 就会报错 Traceback most recent call last A File E python project multiProces
  • html表格里面怎么合并单元格的快捷键,合并单元格快捷键ctrl加什么?

    01 先选择要合并的单元格 按CTRL 1键 再用 及 方向键移动到第二个选项卡 再按ALT M键 再按确定 完成 Excel是Microsoft为使用Windows和AppleMacintosh操作系统的电脑编写的一款电子表格软件 Wor
  • Kali-linux安装之后的简单设置

    1 更新软件源 修改sources list文件 leafpad etc apt sources list 然后选择添加以下适合自己较快的源 可自由选择 不一定要全部 官方源 deb http http kali org kali kali
  • C++ map的常用用法(超详细)(*^ー^)人(^ー^*)

    C 中的map翻译为映射 不是地图 也是常用的STL容器 它在算法竞赛中应用十分广泛 因为map可以将任何基本类型 包括STL容器 映射到任何基本类型 包括STL容器 十分灵活 因此我们很有必要来熟练map的常用用法 目录 1 map的定义
  • 虚拟实验服务器,MED-V动手实验一:服务器部署

    IT168 专稿 微软在2009年4月份发布的MDOP2009中提供了MED V的正式版本 MED V是Microsoft Enterprise Desktop Virtualization的缩写 顾名思义 MED V为企业提供了桌面虚拟化
  • PHY 驱动目录树构建

    在看Linux网络PHY设备驱动的时候一直有个问题萦绕心头 久久挥之不去 辗转反侧 难以入眠 不是因为看了不 懂 而是因为大体的流程都不明白 主要体现在以下几点 1 在注册PHY设备时 驱动所需要的总线是什么时候准备好的 2 总线 设备 驱
  • CTF MISC图片隐写简单题学习思路总结(持续更新)

    系列文章目录 第一篇文章 CTF Crypto简单题学习思路总结 持续更新 文章目录 系列文章目录 前言 一 JPG类隐写 1 1 JPG文件末尾添加字符串 1 2 JPG文件中添加字符串 1 3 图片文件分离 1 4 JSteg JPHi
  • Filesystem Hierarchy Stardard(FHS)规定Linux应放置文件内容

    第一部分 FHS要求必须要存在的目录 第二部分 FHS建议可以存在的目录 第三部分 其他重要 来源 鸟哥的Linux私房菜 基础篇 第四版
  • Safari的html5 localStorage错误:“ QUOTA_EXCEEDED_ERR:DOM异常22:试图向存储中添加超出配额的内容”...

    如何解决Safari的html5 localStorage错误 QUOTA EXCEEDED ERR DOM异常22 试图向存储中添加超出配额的内容 显然 这是设计使然 当Safari OS X或iOS 处于私有浏览模式时 它似乎local
  • Spring解决循环依赖的思路与代码实现

    Java基基 2023 09 08 11 55 发表于上海 这是一个或许对你有用的社群 一对一交流 面试小册 简历优化 求职解惑 欢迎加入 芋道快速开发平台 知识星球 下面是星球提供的部分资料 项目实战 视频 从书中学 往事中 练 互联网高
  • 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦

    程序员面试 算法研究 编程艺术 红黑树 机器学习5大经典原创系列集锦与总结 七月在线 https www julyedu com 面试 算法 机器学习在线课程 作者 July 结构之法算法之道blog之博主 时间 2010年10月 2018
  • linux下phpMyAdmin 出现 “缺少 mysqli 扩展,请检查 PHP 配置。”

    问题一 原因 mysqli这个扩展没有安装 或者你没有在php ini里面加入extension mysqli d 解决方案 yum install php mysql 然后重启apache 或者 编辑php ini 在最后加入 exten
  • 多元回归分析

    多元回归分析 MLR多元线性回归多输入单输出预测 Matlab完整程序 目录 多元回归分析 MLR多元线性回归多输入单输出预测 Matlab完整程序 预测结果 评价指标 基本介绍 程序设计 参考资料 预测结果 评价指标 训练集数据的R2为
  • 学习笔记十九:Pod常见的状态和重启策略

    Pod常见的状态和重启策略 常见的pod状态 第一阶段 第二阶段 扩展 pod重启策略 测试Always重启策略 正常停止容器内的tomcat服务 非正常停止容器里的tomcat服务 测试never重启策略 正常停止容器里的tomcat服务
  • 随机图片API

    文章目录 创建自己的图库 创建index php和img txt img txt写入图片链接 一行一个图片链接 可直接调用接口 二次元随机图 API 随机二次元接口源码 双版本 直接调用API 创建自己的图库 创建index php和img
  • java引入包_java如何导入包

    展开全部 1 首先在项目下创建一个新的文件夹 用来保存jar包 在项目名上点击鼠标62616964757a686964616fe4b893e5b19e31333431336665右键 按顺序点击 New Floder 打开新建文件夹的窗口
  • (Java)leetcode-124 Binary Tree Maximum Path Sum(二叉树中的最大路径和)

    更多LeetCode题解 可移步我的解题记录 持续更新中 题目描述 给定一个非空二叉树 返回其最大路径和 本题中 路径被定义为一条从树中任意节点出发 达到任意节点的序列 该路径至少包含一个节点 且不一定经过根节点 示例 1 输入 1 2 3