二叉树中的最大路径和(Java版)

news2024/9/27 9:24:13

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

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

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

示例 1:

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

示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

解决思路

找最大路径和本质是递归寻找当前节点最大路径

设置全局变量max

        在当前节点左边路径最大值加右边路径最大值大于max,赋值给max

        若小于max,就返回一条路径,左/右路径加当前节点值

        若左/右路径值小于0,那就舍弃,只取当前节点值

所以这个问题解决思路在于找当前节点最大值

        int L = Math.max(0, dfs(root.left));        //左路径若小于0,干脆不要了

        int R = Math.max(0, dfs(root.right));     //右路径同理

        max = Math.max(max, root.val + L + R);         //查询左路径加右路径加当前节点值

 解决

依照上述思路写出以下代码

class Solution {  
    // 定义一个全局变量来存储最大路径和  
    int max = Integer.MIN_VALUE;  
  
    // 主函数,用于启动深度优先搜索并返回最大路径和  
    public int maxPathSum(TreeNode root) {  
        dfs(root); // 从根节点开始深度优先搜索  
        return max; // 返回找到的最大路径和  
    }  
  
    // 深度优先搜索的辅助函数  
    // 该函数返回以当前节点为根的子树中,通过当前节点的最大单边路径和(不包括父节点)  
    int dfs(TreeNode root) {  
        if (root == null) {  
            // 如果当前节点为空,则返回0,表示没有路径和  
            return 0;  
        }  
  
        // 递归地计算左子树和右子树通过各自根节点的最大单边路径和(不包含当前节点)  
        // 注意这里使用Math.max(0, ...)来确保如果子树路径和为负,则忽略该子树  
        int L = Math.max(0, dfs(root.left));  
        int R = Math.max(0, dfs(root.right));  
  
        // 更新全局的最大路径和,考虑当前节点加上左右子树的最大单边路径和  
        max = Math.max(max, root.val + L + R);  
  
        // 返回以当前节点为根的子树中,通过当前节点的最大单边路径和  
        // 这里选择左子树或右子树中较大的一个加上当前节点的值  
        // 注意这里不考虑同时包含左右子树的情况,因为题目要求的是最大单边路径和  
        return Math.max(root.val + L, root.val + R);  
    }   
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1909699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI自动生成PPT哪个软件好?高效制作PPT就用这4个

学生时期做各种小组作业需要做PPT,毕业后开始上班每周大大小小的各种会议和汇报,也少不了PPT的折磨。 倘若你也刚好有这种烦恼,那么不妨试试下面我给大家安利的这4款AI自动生成PPT免费软件~保准你用上以后可不再为PPT制作而发愁!…

面向过程编程详解

目录 前言1. 面向过程编程的定义2. 面向过程编程的特点2.1 过程和函数2.2 顺序执行2.3 全局变量2.4 控制结构 3. 面向过程编程的应用场景3.1 系统级编程3.2 科学计算3.3 小型项目 4. 面向过程编程的优缺点4.1 优点4.2 缺点 5. 代表性的编程语言5.1 C语言5.2 Pascal5.3 Fortran …

【LLM大模型】开发基于云的RAG应用,使用开源 LLM

检索增强生成 (RAG)通常用于开发定制的 AI 应用程序,包括 聊天机器人、推荐系统和其他个性化工具。该系统利用向量数据库和 大型语言模型 (LLM)的优势来提供高质量的结果。 为任何 RAG 模型选择合适的 LLM 非常重要,需要考虑成本、隐私问题和可扩展性等…

仿写SpringMVC

1.创建简单的注解 1.1 Controller package com.heaboy.annotation;import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface Controller { } 1.2 RequestMapping package com.heaboy.annotation;import …

喜讯|华院钢铁行业大模型入选“2024全国企业新质生产力赋能典型案例”

7月2日,由中国科学院主管、科学出版社主办的商业周刊《互联网周刊》(CIW)联合德本咨询(DBC)、中国社会科学院信息化研究中心(CIS)发布了“2024全国企业新质生产力赋能典型案例”。华院计算技术&…

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

1、什么是以太网? 还记得初学以太网的时候,我就被一大堆专业名词给整懵了:什么以太网,互联网,MAC,IP,局域网,万维网,网络分层模型等等等等。慢着!我学的不是以太网吗?怎么出来这么一大堆东西? 啊!以太网究竟是什么?别急,我接下来就尽量用通俗的大白话来给你解释…

香港优才计划多少分获批成功率高?一文看懂各分数段获批情况!

有留意香港优才计划的朋友,应该都了解过,申请优才计划采用打分制,得分多少与最终获批有密不可分的关系。但有一点要提前清楚,申请优才不是得分越高就一定能获批,也不是得分低就一定没希望。 香港优才计划能否获批成功…

将直流电转换为交流电:逆变器的基本原理

什么是逆变器? 大多数电源设计都包括一个称为整流器的部分,该整流器将输入的交流波转换为不稳定的直流电压。但是,我们不能总是依赖来自建筑物主电源的交流输入到我们的系统中。 逆变器是一种将直流电 (DC) 转换为交…

前端javascript中的排序算法之冒泡排序

冒泡排序(Bubble Sort)基本思想: 经过多次迭代,通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素从前面移到后面。 大数据往上冒泡,小数据往下沉,也就是…

Docker-安装MongoDB、RabbitMQ、ActiveMQ、Portainer(保姆篇图示详解)

文章目录 MongoDB 安装RabbitMQ 安装ActiveMQ 安装Portainer 安装 更多相关内容可查看 MongoDB 安装 1.拉取镜像(默认为最新版本,也可指定版本) docker pull mongo:版本号2.根据镜像 运行容器实例 (暴露端口 数据挂载 用户密码设…

【NLP】利用 RAG 模分块技术提升文档处理效能

将大型文档划分为较小的部分是一项至关重要但又复杂的任务,它对检索增强生成 (RAG) 系统的性能有重大影响。这些系统旨在通过结合基于检索和基于生成的方法,提高输出的质量和相关性。有效的分块,即将文档拆分为可管理的片段的过程&#xff0c…

百度Feed业务数仓建模实践

作者 | XY 导读 Feed,即个性化推荐信息流,是百度 App 上承载各种类型内容(如文章、视频、图集等)的重要 topic。本文概要讲述了随着业务发展,移动生态数据研发部在 Feed 数据宽表建模上的演进过程以及一些实践&#xf…

LeetCode67(二进制求和[位运算,大数运算])

二进制求和 题目要求: 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 这道题其实有几种解法.我们先来介绍简单的方法. 我们可以将两个字符串的二进制转成十进制,获取对应值相加之后,我们可以不断对2取余,获取尾数拼接即可.也就是像我们平常求一…

记一次线上流量突增问题排查

一.问题 接流量告警出现获取 xx 信息接口调用次数同比往年大促活动猛涨.扩大至 10 倍之多.心里顿时咯噔一下.最近各种严打,顶风作案.某不是摸到电门了.一下子要把自己带走.从此走向求职之路.一时间脑子哇哇的思绪万千. 202x.5.20 大促开门红的调用.这个是往年活动的时候的调用…

01-引论-操作系统的目标和作用

操作系统的目标 1.方便性 2.有效性 3.可扩充性 4.开放性 操作系统的目标与应用环境有关 在不同的应用环境下,操作系统的重点和功能可能会有所不同。例如,对于桌面操作系统,用户界面的友好性和多媒体功能可能是重点;对于服务…

Qt/C++项目积累: 2.主机监控器 - 2.1 项目介绍

修改记录 序号日期说明对应软件版本号120240709对预期功能和已完成功能进行新增无 一:项目主体编写背景 在观察程序的运行状态时,其对系统的CPU,内存,硬盘占用无疑是几项重要参考指标,而现有的监控软件,搜…

2024-07-08 base SAS programming学习笔记10(read data)

1.读入SAS 数据集 格式如下: data sas-data-set; set sas-data-set; run; sas-data-set 是数据集名称,可以是libname.filename的形式 举例如下: 2.在DATA步使用BY 语句 BY variable语句使用方法: a.必须在PROC SORT里面进行排序…

国产芯片四大流派,你最看好哪一条?

曾经,我们以为“地球村”是大势所趋,大家取长补短,合作共赢。 然而,2018年开始的那一场断供,让芯片自主从一个产业的隐忧变成了我国的一个“明伤”。近几年“卡脖子”事件屡屡上演,“缺芯”、“芯痛”成为…

Redis连接Resp图形化工具和springboot

Redis连接Resp图形化工具和springboot 1.redis配置1.1 备份、修改conf文件1.2 Redis的其它常见配置:1.3 启动Redis:1.4 停止服务:1.5 开机自启: 2. resp的安装、配置和连接:2.1 GitHub上下载2.2 开始连接redis ![在这里…

【Dison夏令营 Day 13】使用 Python 创建扫雷游戏

在本文中,我们将介绍如何使用 Python 语言创建自己的基于终端的扫雷程序。 关于游戏 1992年4月6日,扫雷和纸牌、空当接龙等小游戏搭载在Windows 3.1系统中与用户见面,主要目的是让用户训练使用鼠标。扫雷是一款单人游戏,这个游戏…