leetcode二叉树中的最大路径和(java)

news2024/12/30 2:15:06

二叉树中的最大路径和

  • leetcode 124题- 原题链接
  • 二叉树中的最大路径和 (hard)
  • 解题思路
  • 二叉树专题

leetcode 124题- 原题链接

leetcode 124 .二叉树的最大路径和

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

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。

示例:
在这里插入图片描述
输入: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

提示:

树中节点数目范围是 [1, 3 * 104]
-1000 <= Node.val <= 1000

解题思路

用递归的方式去处理这个问题,我们递归左树和右树时,每次递归,我们去比较一条链路是上的最大值,然后保存下这个最大值,然后在递归的代码里,我们每次要比较左树和右树哪个大,然后哪个去加上头节点的值,因为要形成一个链路,左树和右树我们只能选择一个。

代码演示:
1.数据结构,LeetCodet提供

/**
 * 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) {
        maxGain(root);
        return maxSum;
        
    }

    public int maxGain(TreeNode node) {
       if(node == null){
           return 0;
       }
       int letMax = maxGain(node.left);
       int rightMax = maxGain(node.right);
       letMax = Math.max(letMax,0);
       rightMax = Math.max(rightMax , 0);
       //更新一条链路的最大值
       maxSum = Math.max(maxSum, node.val+letMax+rightMax);
       //每次返回一个链路的最大值进行下一次递归的过程中去判断,因为要形成一个链路,
       //左树和右树只能要一边,否则无法形成链路,去完成最大值更新。
       return Math.max(rightMax,letMax) + node.val;
    }

}

二叉树专题

二叉树专题-求两个节点的最低公共祖先

二叉树专题-判断二叉树是不是完全二叉树java实现

判断二叉树是不是平衡二叉树–java实现

二叉树专题: 判断是不是搜索二叉树-java实现

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

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

相关文章

Selenium、JUnit、Appium…一网打尽,轻松掌握自动化测试工具

目录 前言&#xff1a; 一、 自动化测试原理 二、 自动化测试工具和技术 三、 自动化测试案例 四、 总结 前言&#xff1a; 自动化测试是现代软件开发中必不可少的组成部分&#xff0c;它可以让开发者快速、高效地测试软件&#xff0c;并确保其符合预期要求。在本文中&am…

工业开源网站

12、JCAE JAVA based environment for CAE applications. jCAE - Java Computer Aided Engineering 13、gCAD3D gCAD3D.org 14、boardcad http://www.boardcad.com/ 15、solvespace SolveSpace - parametric 3d CAD 16、DraftSight 不开源 2D CAD Drafting and 3D Design | Dra…

公司来了个00后卷王,卷的让人崩溃.....

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招已结过去了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&a…

抖音矩阵系统源码开发技术分析

在这个过程中&#xff0c;开发人员使用了多种编程语言、框架和工具&#xff0c;包括 Python、Java、Hadoop、Spark 和 Kafka 等。他们还使用了不同的数据库技术&#xff0c;例如 MySQL 和 MongoDB。 整个开发过程通常分为四个主要阶段&#xff1a;需求分析、设计、开发和测试。…

数值计算 - 常用函数值计算方法

秦九韶算法 什么是秦九韶算法&#xff1f; 可以把多项式改写为便于递推的形式&#xff1a; 泰勒展开式 什么是泰勒展开式&#xff1f; 泰勒公式&#xff0c;也称泰勒展开式。是用一个函数在某点的信息&#xff0c;描述其附近取值的公式。如果函数足够平滑&#xff0c;在已知函…

网络作业8【计算机网络】

网络作业8【计算机网络】 前言推荐网络作业8一. 单选题&#xff08;共16题&#xff0c;60分&#xff09;二. 填空题&#xff08;共2题&#xff0c;20分&#xff09;三. 阅读理解&#xff08;共1题&#xff0c;20分&#xff09; 最后 前言 2023-5-23 16:54:08 以下内容源自《【…

最优化方法Python计算:一元函数搜索算法——牛顿法

设函数 f ( x ) f(x) f(x)&#xff0c;在 [ a , b ] [a,b] [a,b]上二阶连续可微且有唯一的最小值点 x 0 x_0 x0​。由于 f ( x ) f(x) f(x)是 [ a , b ] [a,b] [a,b]上的单峰函数&#xff0c;故 f ′ ′ ( x ) > 0 f(x)>0 f′′(x)>0&#xff0c; x ∈ ( a , b ) x\in…

实时频谱-2.2数字信号处理

数字信号处理&#xff08;DSP&#xff09;概念 数字信号处理(digital signal processing)&#xff0c;是以数字运算方法实现信号变换、滤波、检测、估值、调制解调以及快速算法等处理的一门学科。数字信号处理具有高精度、高可靠性、可程序控制、可时分复用、便于集成化等优点…

【Spring篇】AOP事务管理

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 一、AOP事务管理 1.Spring事务简介 1.相关概念介绍 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或 业务层 保障一系列的数据库操作同成功同失…

代码随想录 字符串 Java

文章目录 &#xff08;简单&#xff09;344. 反转字符串&#xff08;简单&#xff09;541. 反转字符串||&#xff08;简单&#xff09;剑指Offer 05. 替换空格&#xff08;中等&#xff09;151. 反转字符串中的单词&#xff08;简单&#xff09;剑指 Offer 58 - II. 左旋转字符…

word怎么转excel?一键转换并不难

在职场中&#xff0c;常常需要将 Word 文档转换为 Excel 表格&#xff0c;以便更好地管理和数据分析。本文将介绍两种 Word 转 Excel 的方法&#xff0c;以及如何在 Excel 中处理转换后的数据。 方法一&#xff1a;使用文本转换向导 使用Word的文本转换向导&#xff0c;将Word文…

第二篇、基于Arduino uno,用oled0.96寸屏幕显示数字和字符——结果导向

0、结果 说明&#xff1a;先来看看实际的结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的。 2、连线 说…

SQL执行过程

1. select 语句执行过程 一条 select 语句的执行过程如上图所示 1、建立连接 连接器会校验你输入的用户名和密码是否正确&#xff0c;如果错误会返回提示&#xff0c;如果正确&#xff0c;连接器会查询当前用户对于的权限。连接器的作用就是校验用户权限 2、查询缓存 MySQL…

VPX通信基础理论

新型VPX(VITA 46)标准是自从VME引入后的25年来&#xff0c;对于VME总线架构的最重大也是最重要的改进。它将增加背板带宽&#xff0c;集成更多的I/O&#xff0c;扩展了格式布局。 目前&#xff0c;VME64x已经不能满足国防和航空领域越来越高的性能要求和更为恶劣环境下的应用。…

老杨说运维 | 农商行数字化转型的误区与破局之道

为推动农村中小银行更好地满足人民银行《金融科技发展规划&#xff08;2022—2025年&#xff09;》及银保监会《关于银行业保险业数字化转型的指导意见》对银行数字化转型的相关要求&#xff0c;加快推进农村基层数字化治理&#xff0c;助力乡村振兴&#xff0c;农信银资金清算…

低成本副业:开发小程序商城攻略

随着互联网的普及和电子商务的兴起&#xff0c;越来越多的人选择做点副业&#xff0c;其中开发小程序商城是一个不错的选择。相比传统的实体店&#xff0c;小程序商城的成本更低&#xff0c;而且门槛更低&#xff0c;可以让更多的人参与到副业中来。那么&#xff0c;如何开发自…

SOLIDWORKS 认证考试简介

1、SOLIDWORKS 认证助理工程师-机械设计 (CSWA–Mechanical Design) 证书简介&#xff1a;通过CSWA 认证证明了您在 SOLIDWORKS 上的专长&#xff0c;即表示您已成功展示了使用 SOLIDWORKS 机械设计工具的能力&#xff0c;了解 SOLIDWORKS 中可帮助设计机械零部件的工具集。 考…

大模型时代的BERT 详解

最近在学习BERT。 简单说几句。 BERTBidirectional Encoder Representation from Transformer 作者是谷歌的团队 主要亮点是使用transformer和pre-trainning未标注的数据&#xff0c;训练出来一个通用的语言模型。 0&#xff1a;背景 视觉算法因为有ImageNet的存在&#…

Matlab --- 如何用matlab在三维坐标系中画一个三维向量

用MATLAB画三维向量 前两天&#xff0c;我在写Gram-Schmidt正交化的文章时&#xff0c;想到最好用matlab把还没有经过正交化计算的原始向量&#xff0c;和已经经过正交化处理后的正交基&#xff0c;在三维坐标系中&#xff0c;用图像的方式表示出来。这样可以更加直观的看到向量…

vue3实现动态菜单和动态路由和刷新后白屏处理

前言&#xff1a; 项目中&#xff0c;当每一个角色得到的界面不一致的时候&#xff0c;我们就不能使用静态菜单了&#xff0c;而是要从后端得到动态的菜单数据&#xff0c;然后动态的将菜单数据展示在界面上。 除了在界面展示&#xff0c;也还要将界面的路由动态添加&#xf…