图解leetcode —— 124. 二叉树中的最大路径和
2024-09-01 19:06:35
前言:
每道题附带动态示意图,提供java、python两种语言答案,力求提供leetcode最优解。
描述:
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
思路:
java:
class Solution {
/**
* 最大路径和
*/
private int sum = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) {
maxGain(root);
return sum;
} public int maxGain(TreeNode node) {
if (node == null) {
return 0;
}
// 小于0的权值舍弃,代表不走该节点
int leftGain = Math.max(maxGain(node.left), 0);
int rightGain = Math.max(maxGain(node.right), 0); int pathGain = leftGain + rightGain + node.val;
sum = Math.max(sum, pathGain);
// 返回最大路径,路径被定义为一条从树中任意节点出发,达到任意节点的序列。
return node.val + Math.max(leftGain, rightGain);
}
}
结果:
python:
import sys class Solution:
def maxPathSum(self, root: TreeNode) -> int:
def max_gain(node: TreeNode) -> int:
nonlocal max_sum
if not node:
return 0
left_gain = max(max_gain(node.left), 0)
right_gain = max(max_gain(node.right), 0) path_gain = left_gain + right_gain + node.val
max_sum = max(max_sum, path_gain) return node.val + max(left_gain, right_gain) # 负无穷
max_sum = float('-inf')
max_gain(root)
return max_sum
结果:
最新文章
- ElasticSearch 5学习(1)——安装Elasticsearch、Kibana和X-Pack
- underscorejs 源码走读笔记
- Apache Lucene(全文检索引擎)—搜索
- python学习之——爬取网页信息
- php面试题之二——数据结构和算法(高级部分)
- 二十二、OGNL的一些其他操作
- jmap(Memory Map For Java)
- xdebug及webgrind的联用
- WHY IE AGAIN? - string.charAt(x) or string[x]?
- JAVA基础--方法的重写overwrite 和 重载overload
- Ubuntu下编译Bilibili/ijkplayer
- DxPackNet 2.视频截图和捕捉帧图片
- PYTHON风格规范-Google 开源项目风格指南
- 实现自动SSH连接
- Input标签使用整理
- Luogu P2575 高手过招
- Source Insight 中文注释为乱码解决办法(完美解决,一键搞定)
- spring 事务回滚。
- ubuntu18换国内源
- numpy 基于现有数据创建ndarray(from existing data)