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

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

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

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
}

猜你喜欢

转载自blog.csdn.net/qq_42956653/article/details/121526071