【问题描述】[困难]

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

【解答思路】

1. 递归




时间复杂度:O(N) 空间复杂度:O(N)

class Solution {int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}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 priceNewpath = node.val + leftGain + rightGain;// 更新答案maxSum = Math.max(maxSum, priceNewpath);// 返回节点的最大贡献值return node.val + Math.max(leftGain, rightGain);}
}

【总结】

1.在递归中利用全局变量,来更新最大路径的值。前边遇到过和全局变量结合的递归,例如 106 题,当递归和全局变量结合有时候确实会难理解些。而在 110 题 中也应用了和这个题一样的思想,就是发现递归过程和主函数有一样的逻辑,此时可以在递归过程中就可以进行求解。
2.递归定义出口 想好每次迭代的条件

转载链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/er-cha-shu-zhong-de-zui-da-lu-jing-he-by-leetcode-/

参考链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-30/

[Leedcode][JAVA][第124题][二叉树中的最大路径和][递归][二叉树]相关推荐

  1. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]

    [问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...

  2. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

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

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

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

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

  5. [Leedcode][JAVA][第470题][Ran7()实现Rand10()]

    [问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...

  6. [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

    [问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...

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

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

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

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

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

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

最新文章

  1. multipart/form-data和application/x-www-form-urlencoded的区别
  2. 数据结构之堆的插入、取值、排序(细致讲解+图片演示)
  3. java的model层实例_Struts 2.1.6 精简实例系列教程(3):新闻管理Model层的开发(整合iBatis)...
  4. 写在S3C2440A平台+winCE5.0+NAND +HIVE注册表的实现
  5. linux 判断网卡是否异常_如何判断linux网卡故障?
  6. 论文浅尝 | 基于知识库的自然语言理解 03#
  7. gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架
  8. $.post 中文乱码 php,如何解决jquery $.post 乱码问题
  9. 二叉树遍历算法之三:后序遍历
  10. 一个壮观的雨瀑布视频
  11. 【图像修复】基于matlab GUI维纳滤波图像复原【含Matlab源码 851期】
  12. google人体浏览器+android,google人体浏览器
  13. 基于 Elasticsearch 存储的HBase二级索引方案
  14. mysql codesmith_CodeSmith MySql
  15. python:利用pandas进行绘图(总结)绘图格式
  16. 艾伟_转载:[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”
  17. seo和sem是什么意思
  18. Android 实现HTTPS自签名证书(非常详细)
  19. DataFrame.to_excel多次写入不同Sheet
  20. Linux-tar打包与解压命令

热门文章

  1. C#-ToString格式化
  2. 减少GC开销的5个编码技巧
  3. 二叉树学习笔记--先序遍历
  4. asp.net 网站开发流程总结
  5. 当某个快捷键不能用时很可能是热键冲突
  6. 关于《高性能JavaScript》制表(Memoization)笔记
  7. Singularity 介绍
  8. 男生给女生最牛B的告白
  9. java 音频对比_java – 比较两个不同的音频文件不起作用
  10. Android 抖动提示动画