背景

  • 为什么你要加入一个技术团队?
  • 如何加入 LSGO 软件技术团队?
  • 我是如何组织“算法刻意练习活动”的?
  • 为什么要求团队的学生们写技术Blog

题目英文

Given a non-empty binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.

Example 1:

Input: [1,2,3]1/ \2   3Output: 6

Example 2:

Input: [-10,9,20,null,null,15,7]-10/ \9  20/  \15   7Output: 42

题目中文

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

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

示例 1:

输入: [1,2,3]1/ \2   3输出: 6

示例 2:

输入: [-10,9,20,null,null,15,7]-10/ \9  20/  \15   7输出: 42

算法实现

     8/ \-3   7/  \
1    4

考虑左子树 -3 的路径的时候,我们有左子树 1 和右子树 4 的选择,但我们不能同时选择。

如果同时选了,路径就是 … -> 1 -> -3 -> 4 就无法通过根节点 8 了。

所以我们只能去求左子树能返回的最大值,右子树能返回的最大值,选一个较大的。

/*** Definition for a binary tree node.* public class TreeNode {*     public int val;*     public TreeNode left;*     public TreeNode right;*     public TreeNode(int x) { val = x; }* }*/
public class Solution
{private int _max = int.MinValue;public int MaxPathSum(TreeNode root){MaxPath(root);return _max;}private int MaxPath(TreeNode current){if (current == null)return 0;int left = Math.Max(MaxPath(current.left), 0);int right = Math.Max(MaxPath(current.right), 0);_max = Math.Max(_max, current.val + left + right);return current.val + Math.Max(left, right);}
}

实验结果

  • 状态:通过
  • 93 / 93 个通过测试用例
  • 执行用时: 152 ms, 在所有 C# 提交中击败了 86.96% 的用户
  • 内存消耗: 29.7 MB, 在所有 C# 提交中击败了 37.50% 的用户


相关图文

1. “数组”类算法

  • LeetCode实战:三数之和
  • LeetCode实战:最接近的三数之和
  • LeetCode实战:求众数
  • LeetCode实战:缺失的第一个正数
  • LeetCode实战:快乐数
  • LeetCode实战:寻找两个有序数组的中位数
  • LeetCode实战:盛最多水的容器
  • LeetCode实战:删除排序数组中的重复项
  • LeetCode实战:搜索旋转排序数组
  • LeetCode实战:螺旋矩阵
  • LeetCode实战:螺旋矩阵 II

2. “链表”类算法

  • LeetCode实战:两数相加
  • LeetCode实战:删除链表的倒数第N个节点
  • LeetCode实战:合并两个有序链表
  • LeetCode实战:合并K个排序链表
  • LeetCode实战:两两交换链表中的节点
  • LeetCode实战:旋转链表
  • LeetCode实战:环形链表

3. “栈”类算法

  • LeetCode实战:有效的括号
  • LeetCode实战:最长有效括号
  • LeetCode实战:逆波兰表达式求值

4. “队列”类算法

  • LeetCode实战:设计循环双端队列
  • LeetCode实战:滑动窗口最大值
  • LeetCode实战:整数反转
  • LeetCode实战:字符串转换整数 (atoi)

5. “递归”类算法

  • LeetCode实战:爬楼梯

6. “字符串”类算法

  • LeetCode实战:反转字符串
  • LeetCode实战:翻转字符串里的单词
  • LeetCode实战:最长公共前缀
  • LeetCode实战:字符串相加
  • LeetCode实战:字符串相乘

7. “树”类算法

  • LeetCode实战:相同的树
  • LeetCode实战:对称二叉树
  • LeetCode实战:二叉树的最大深度
  • LeetCode实战:将有序数组转换为二叉搜索树

8. “哈希”类算法

  • LeetCode实战:两数之和

9. “搜索”类算法

  • LeetCode实战:搜索二维矩阵
  • LeetCode实战:子集

10. “动态规划”类算法

  • LeetCode实战:最长回文子串
  • LeetCode实战:最大子序和
  • LeetCode实战:不同路径

11. “回溯”类算法

  • LeetCode实战:全排列

12. “数值分析”类算法

  • LeetCode实战:回文数
  • LeetCode实战:x 的平方根

LeetCode实战:二叉树中的最大路径和相关推荐

  1. [LeetCode]124. 二叉树中的最大路径和(java实现)递归

    [LeetCode]124. 二叉树中的最大路径和(java实现)递归 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...

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

    124.二叉树中的最大路径和 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: ...

  3. Java实现 LeetCode 124 二叉树中的最大路径和

    124. 二叉树中的最大路径和 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: ...

  4. LeetCode 124. 二叉树中的最大路径和(DFS)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点 ...

  5. leetcode 124 二叉树中的最大路径和 C语言

    题目 leetcode 124 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 代码 int ma ...

  6. Leetcode 124.二叉树中的最大路径

    解法1 解法 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNo ...

  7. 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和

    Title 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 ...

  8. NC6 二叉树中的最大路径和

    这里写自定义目录标题 题目描述 思路 递归 题目描述 寻找二叉树中从任意节点开始的最大不重复路径和 示例: 输入:{1,2,3} 输出:6 原题链接:NC6 二叉树中的最大路径和 思路 拿到这道题第一 ...

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

    124. 二叉树中的最大路径和: 题目链接 :124. 二叉树中的最大路径和 题目: 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列.同一个节点在一条路径序列中 至多出 ...

最新文章

  1. What is a lambda expression in C++11?
  2. 面对对象的程序设计初探总结
  3. 计组之指令系统:3、CISC和RISC
  4. 研究一下识别验证码,。。。随笔记录
  5. 使用Spring Boot开发者工具进行自动重启和页面自动刷新
  6. 基于RNN和CTC的语音识别模型,探索语境偏移解决之道
  7. Docker和Ubuntu主机互传复制文件
  8. Rust 1.34替代Cargo注册表 与crates.io共存
  9. 5G虚拟专网七大典型行业案例!(附下载)
  10. 计算机编程ebcdic码,ASCII码和EBCDIC码
  11. dyn_threshold 算子
  12. 电脑可以连接手机热点,却无法连路由器无线wifi
  13. Internet Explorer 无法打开该 Internet 站点。请求的站点不可用
  14. 基于Android的MediaPlayer的音乐播放器的封装
  15. DDR3的学习笔记(一)
  16. Android Studio新手必读
  17. explicit,violate,volatile,mutable
  18. 自动领取起点网页版的经验值
  19. 全网最详细的Gephi安装与使用教程
  20. python 使用excel画图

热门文章

  1. java 并发统计_java并发编程|CountDownLatch计数器
  2. STARTUP报错:ORA-00205: error in identifying control file, check alert log for more info
  3. Python培训教程分享:“高效实用” 的Python工具库
  4. 软件测试培训:如何搭建测试环境
  5. 参加前端培训主要学习什么语言
  6. animation与transition区别
  7. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
  8. mysql limit offset
  9. 多角度解析自动驾驶芯片
  10. 2021全国高校计算机能力挑战赛(初赛)C语言试题一