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

【leetcode----二叉树中的最大路径和】

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

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

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

题目理解与分析:就是在二叉树中找到一条和最大的线。

解题思路:从上往下使用递归,1.迭代计算最大的左孩子长度,迭代计算最大的右孩子长度  2.计算每个节点加上左右孩子的最大长度作为最大值,并每个计算完与最大值比较更新。3. 判断左节点和右节点孰大孰小,更新节点的最大路径。

因为最长的线可能出现在:以叶节点为根的单个路径、以叶节点的父节点为根的回旋路径、以根节点为父节点的回旋路径/单个路径。所以归根到底是记录以每个节点为根的最大路径。

class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right
class Solution:def __init__(self):self.maxSum = float("-inf")def maxPathSum(self, root: TreeNode) -> int:def maxGain(node):if not node:return 0leftGain = max(maxGain(node.left), 0)rightGain = max(maxGain(node.right), 0)priceNewPath = node.val + leftGain + rightGainself.maxSum = max(self.maxSum, priceNewPath)return node.val + max(leftGain, rightGain)maxGain(root)return self.maxSum

http://www.lryc.cn/news/350806.html

相关文章:

  • Rust: 编译过程中链接器 `cc` 没有找到
  • 【vue-3】动态属性绑定v-bind
  • Rust:多线程环境下使用 Mutex<T> 还是 Arc<Mutex<T>> ?
  • 关于如何创建一个可配置的 SpringBoot Web 项目的全局异常处理
  • docker三种自定义网络(虚拟网络) overlay实现原理
  • C#上位机1ms级高精度定时任务
  • 盘点28个免费域名申请大全
  • 【vue】封装的天气展示卡片,在线获取天气信息
  • 【MySQL】库的操作和表的操作
  • 【学习笔记】后端(Ⅰ)—— NodeJS(Ⅱ)
  • VMware报平台不支持虚拟化Win10家庭版关闭Hyper-V及内核隔离
  • 简单介绍十款可以免费使用的API测试工具
  • 非授权人员进入报警系统
  • Mysql基础教程(03):AND
  • 为什么要使用 eval
  • BCD编码(8421)介绍
  • 前端javascript包管理,npm升级用pnpm
  • 数据库操作(函数)
  • [建堆堆排序的时间复杂度推导]向上建堆向下建堆堆排序的时间复杂度分析推导
  • 【C++初阶】--- C++入门(上)
  • 安装和使用图像处理软件GraphicsMagick @FreeBSD
  • 一款功能强大的安卓虚拟机应用——VMOS Pro使用分享
  • 【408真题】2009-12
  • vue3第三十三节(TS 之 computed watch)
  • 工厂模式(简单工厂模式+工厂模式)
  • 整理好了!2024年最常见 20 道 Redis面试题(四)
  • sudo pip3 install rpi_ws281x error: externally-managed-environment
  • day08-Java常用API
  • 设计模式--建造者模式
  • 运行时间比较