golang力扣leetcode 124. 二叉树中的最大路径和

简介: golang力扣leetcode 124. 二叉树中的最大路径和

题解

思路,递归,大问题分解成小问题

递归三件套:

  1. 递归结束条件是什么
  2. 大问题分解成小问题
  3. 每次递归给上次返回什么

代码

package main
import "math"
type TreeNode struct {
  Val   int
  Left  *TreeNode
  Right *TreeNode
}
func maxPathSum(root *TreeNode) int {
  maxSum := math.MinInt32
  var dfs func(root *TreeNode) int
  dfs = func(root *TreeNode) int {
    if root == nil {
      return 0
    }
    left := dfs(root.Left)
    right := dfs(root.Right)
    //左+根+右 情况
    all := left + root.Val + right
    //更新到全局变量
    maxSum = max(maxSum, all)
    //max(左,右)+根 --->单边 情况
    half := root.Val + max(left, right)
    //主要是为了应为负数的情况,既然是负数,还不如不加
    return max(half, 0)
  }
  dfs(root)
  return maxSum
}
func max(a, b int) int {
  if a > b {
    return a
  }
  return b
}
目录
相关文章
|
5天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
9 1
|
5天前
leetcode代码记录(二叉树的所有路径
leetcode代码记录(二叉树的所有路径
9 0
|
5天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
6 0
|
6天前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
7 0
|
6天前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
9 0
|
6天前
leetcode代码记录(二叉树的最大深度
leetcode代码记录(二叉树的最大深度
8 0
|
6天前
leetcode代码记录(翻转二叉树
leetcode代码记录(翻转二叉树
7 0
|
6天前
leetcode代码记录(二叉树的层序遍历
leetcode代码记录(二叉树的层序遍历
9 0
|
10天前
|
监控 算法 Go
Golang深入浅出之-Go语言中的服务熔断、降级与限流策略
【5月更文挑战第4天】本文探讨了分布式系统中保障稳定性的重要策略:服务熔断、降级和限流。服务熔断通过快速失败和暂停故障服务调用来保护系统;服务降级在压力大时提供有限功能以保持整体可用性;限流控制访问频率,防止过载。文中列举了常见问题、解决方案,并提供了Go语言实现示例。合理应用这些策略能增强系统韧性和可用性。
41 0
|
8天前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
135 1