当前位置: 首页 > news >正文

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


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

一、题目描述

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

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

给你一个二叉树的根节点 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

提示:

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

三、解题思路

  1. 基本思路:
      初看这一题,好像没有思路。但是,仔细分析一下,其实每个节点无非就三种情况,一种是成为路径的根,另一种是非根,最后一种就是不选;如果是路径的根,那就要计算其左子树和右子树的路径和;如果是非根,那就选择左右子树最大的一个成为路径的一部分;如果左右子树+本身都是负的,那就不选了这个节点。
      个人建议:当碰到无法无从下手的题目,可以从细节考虑,分析可能发生的情况,然后每种情况要怎么处理。
  2. 具体思路:
    • 如果节点为空,则返回 0 ;
    • 计算左右子树最大路径;
    • 如果选取该节点为根,则更新最大值;
    • 如果不选该节点为根,则返回左右子树最大路径,如果为负,则返回 0 ;

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)【n 为节点数】
空间复杂度: O ( n ) \Omicron(n) O(n)

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/
class Solution {
public:int ans = -1000;int maxPathSum(TreeNode* root) {maxPath(root);return ans;}int maxPath(TreeNode* root) {if (!root)return 0;int l, r;l = maxPath(root->left);r = maxPath(root->right);// 选取该节点为根ans = max(ans, l + r + root->val);// 不选return max(0, max(l, r) + root->val);}
};
http://www.lryc.cn/news/487861.html

相关文章:

  • echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子
  • 视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做
  • Excel——宏教程(精简版)
  • C++中的std::tuple和std::pair
  • 引力搜索算法
  • 【时间之外】IT人求职和创业应知【35】-RTE三进宫
  • Linux的目录结构
  • python: generator IDAL and DAL using sql server 2019
  • 命令执行简单
  • 【一句话经验】亚马逊云EC2 ubuntu24.04.1开启ROOT登录Permission denied (publickey)
  • 百度智能云千帆大模型平台引领企业创新增长
  • 【Linux】深入理解GCC/G++编译流程及库文件管理
  • 【Unity基础】对比Unity中两种粒子系统
  • 琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试
  • C# 深层副本与浅层副本 深拷贝与浅拷贝
  • CH06_Lambda表达式
  • 大模型本地部署实践:Ollama+Open-WebUI(MacOS)
  • JavaScript——DOM编程、JS的对象和JSON
  • SIMCom芯讯通A7680C在线升级:FTP升级成功;http升级腾讯云对象储存的文件失败;http升级私有服务器的文件成功
  • OSRM docker环境启动
  • Vue3 动态获取 assets 文件夹图片
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>
  • 代码随想录算法训练营第五十一天|Day51 图论
  • uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)
  • STM32完全学习——系统时钟设置
  • Github 2024-11-16Rust开源项目日报 Top10
  • CH03_反射
  • vue2侧边导航栏路由
  • core 不可变类型 线程安全 record
  • linux之调度管理(8)-SMP cpu 的 psci启动