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

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.递归

解题思路

        二叉树 abc,a 是根结点(递归中的 root),bc 是左右子结点(代表其递归后的最优解)。
最大的路径,可能的路径情况:

  •         b + a + c。
  •         b + a + a 的父结点。
  •         a + c + a 的父结点。

        其中情况 1,表示如果不联络父结点的情况,或本身是根结点的情况。这种情况是没法递归的,但是结果有可能是全局最大路径和。情况 2 和 3,递归时计算 a+b 和 a+c,选择一个更优的方案返回,也就是上面说的递归后的最优解啦。

        另外结点有可能是负值,最大和肯定就要想办法舍弃负值(max(0,x))。但是上面 3 种情况,无论哪种,a 作为联络点,都不能够舍弃。

        代码中使用 val 来记录全局最大路径和,ret 是情况 2 和 3,lmr 是情况 1。所要做的就是递归,递归时记录好全局最大和,返回联络最大和。

        联络的意思就是例子中,b和c是没有直接连接的,通过a点,这3个点连在一起,这时a点就把b和c联络在一起,但是通过a联络bc就无法再向a的上层连线了。

class Solution {
public:int maxPathSum(TreeNode* root, int &val){if (root == nullptr) return 0;int left = maxPathSum(root->left, val);int right = maxPathSum(root->right, val);int lmr = root->val + max(0, left) + max(0, right);int ret = root->val + max(0, max(left, right));val = max(val, max(lmr, ret));return ret;}int maxPathSum(TreeNode* root) {int val = INT_MIN;maxPathSum(root, val);return val;}
};
http://www.dtcms.com/a/469673.html

相关文章:

  • 建设南大街小学网站wordpress首页调用指定文章列表
  • 大型语言模型(LLM)基础:从原理到核心概念详解(GPT-4 / 文心一言 / 通义千问)
  • python高级03——多任务编程
  • 树模型优劣大比拼xgboost/lightgbm/RF/catboost,股价预测怎么选模型
  • 哈尔滨快速建站公司推荐营销型网站建设实战》
  • 4.3-中间件之Kafka
  • 方寸之间见天地:新兴高端印章的当代破局与价值重构
  • 如何改善基于深度学习的场重构
  • Maven 进行项目构建settings.xml 配置教程
  • 磁力搜索网站怎么做的网站和app设计区别
  • 西安网站建设公司都有哪些网站设计开发文档模板下载
  • C++设计模式_结构型模式_桥接模式Bridge
  • 关于flutter插件的存储位置问题
  • 把“Mixed Content”吃干抹净——一次 https→http 踩坑实录
  • 中山大学联合项目 论文解读 | iManip:面向机器人操作的技能增量学习
  • Unity:Json笔记——Json文件格式、JsonUtlity序列化和反序列化
  • 第八章 惊喜15 小萍收获初会
  • RabbitMQ基础知识与Spring Boot 3.x集成案例
  • 租房网站建设多少钱网站域名怎么改
  • Redis CPU高负载案例分析
  • ARMv9 CCA机密计算架构演进技术解析:重塑云原生时代的数据安全基石
  • 湖州网站设计浙北数据最新发布的手机有哪些
  • AD加域账号权限设置
  • 解决idea报错:Error running TrustApexCrmApplication. Command line is too long
  • 网站开发淄博进口商品代理平台
  • systme V共享内存(version1)
  • 万网网站制作wordpress投稿管理系统
  • python(47) : 快速截图[Windows工具(2)]
  • VSCODE GDB调试
  • 江西企业网站定制wordpress网页效果