题解
思路,递归,大问题分解成小问题
递归三件套:
- 递归结束条件是什么
- 大问题分解成小问题
- 每次递归给上次返回什么
代码
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 }