Title

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:

输入: [1,2,3]

   1/ \2   3

输出: 6

示例 2:

输入: [-10,9,20,null,null,15,7]

   -10/ \9  20/  \15   7

输出: 42

Solve

递归

首先考虑实现一个简化的函数,该函数计算二叉树中的一个节点的最大贡献值,具体而言,就是在以该节点为根节点的子树中寻找以该节点为起点的一条路径,使得该路径上的节点值之和最大。

具体而言,该函数的计算过程如下:

  • 空节点的最大贡献值等于0
  • 非空节点的最大贡献值等于节点值与其子节点中的最大贡献值之和

上述计算过程是递归的过程,因此,对根节点调用此函数,即可得到每个节点的最大贡献值。

得到每个节点的最大贡献值之后,对于二叉树中的一个节点,该节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值,如果子节点的最大贡献值为正数,则计入该节点的最大路径和,否则不计入该节点的最大路径和。

维护一个全局变量maxSum存储最大路径和,在递归过程中更新maxSum的值,最后得到的maxSum的值即为二叉树中的最大路径和。

Code

class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def __init__(self):self.maxSum = float("-inf")def maxPathSum(self, root: TreeNode) -> int:def maxGain(node: TreeNode):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

复杂度分析

  • 时间复杂度:O(N),其中 N 是二叉树中的节点个数。对每个节点访问不超过 2 次。

  • 空间复杂度:O(N),其中 N 是二叉树中的节点个数。空间复杂度主要取决于递归调用层数,最大层数等于二叉树的高度,最坏情况下,二叉树的高度等于二叉树中的节点个数。

124. Binary Tree Maximum Path Sum 二叉树中的最大路径和相关推荐

  1. 【重点】LeetCode 124. Binary Tree Maximum Path Sum

    LeetCode 124. Binary Tree Maximum Path Sum 参考链接:http://zxi.mytechroad.com/blog/tree/leetcode-124-bin ...

  2. 124 Binary Tree Maximum Path Sum

    题目: 124 Binary Tree Maximum Path Sum 这道题就是分别算出左子树和右子树的可能最大和,然后对Path的值进行更新即可 class Solution:def __ini ...

  3. 【LeetCode】124. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  4. LeetCode 124. Binary Tree Maximum Path Sum

    原题 求二叉树的最大路径和 Given a binary tree, find the maximum path sum. For this problem, a path is defined as ...

  5. 124. Binary Tree Maximum Path Sum

    题目: Given a binary tree, find the maximum path sum. For this problem, a path is defined as any seque ...

  6. leetcode @python 124. Binary Tree Maximum Path Sum

    题目链接 https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题目原文 Given a binary tree, find the ...

  7. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum 题目链接:https://leetcode.com/problems... dfs对每个node,查一下包含这个node的最大路径值. /** ...

  8. [Leetcode] Binary Tree Maximum Path Sum

    这是LeetCode上的一道题目,需要求二叉树中两点路径的最大和.原题是 https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ ...

  9. Leetcode | Binary Tree Maximum Path Sum

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

最新文章

  1. javascript DOM 编程艺术 札记2 平稳退化
  2. “指标预警”新功能上线,智能实现数据监测
  3. 移动办公系统 服务器地址,安卓系统移动办公服务器地址
  4. 游戏模型提取_狐狸在等我中文版 是一款恋爱冒险游戏
  5. jmeter 不同场景 比例_在JMeter测试中如何根据业务场景来控制运行比例
  6. 【Jetson-Nano】2.Tensorflow object API和Pytorch的安装
  7. python中的urlencode和urldecode
  8. (二)、WCF通道模型
  9. Tableau安装教程
  10. C语言——将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
  11. 农村产权交易平台上线,大力发展村金融经济
  12. mac系统升级导致VirtualBox报Kernel driver not installed (rc=-1908)
  13. 阿里小程序亮相2019上海云峰会:大生态促成许多“小而美”
  14. 【面向对象程序设计】侩子手游戏(Java、JavaFX)
  15. 硬盘修复真经 误区、缺陷、参数与低格
  16. 管理经济学学习之初探
  17. Discuz如何开发关注功能
  18. 【Python爬虫实战】用urllib与服务端交互(发送和接收数据)
  19. 函数周期表丨值丨数学函数系列
  20. 关于Linux 定时任务的注意事项

热门文章

  1. 27_多线程_第27天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义...
  2. Plupload上传插件中文文档
  3. sphinx conf 文件模板
  4. 深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现...
  5. Ifvisible.js – 判断网页中的用户是闲置还是活动状态
  6. .net得到ip(引)
  7. Net中如何操作IIS
  8. 如何计算和控制好项目开发成本?
  9. 每日程序C语言12-统计字符个数
  10. XP或Win7系统下grub4dos安装双系统ubuntu(32或64)