package main
import (
"fmt"
"math"
)
// TreeNode 定义二叉树节点结构
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
// 全局变量,用于存储最大路径和
var maxSum int
func maxPathSum(root *TreeNode) int {
maxSum = math.MinInt32 // 初始化为最小整数
maxGain(root)
return maxSum
}
func maxGain(node *TreeNode) int {
if node == nil {
return 0
}
// 递归计算左右子树的最大贡献值
leftGain := max(maxGain(node.Left), 0)
rightGain := max(maxGain(node.Right), 0)
// 当前节点的最大路径和
priceNewPath := node.Val + leftGain + rightGain
// 更新全局最大路径和
maxSum = max(maxSum, priceNewPath)
// 返回节点的最大贡献值
return node.Val + max(leftGain, rightGain)
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
// 构建示例二叉树
root := &TreeNode{Val: 10}
root.Left = &TreeNode{Val: 2}
root.Right = &TreeNode{Val: 10}
root.Left.Left = &TreeNode{Val: 20}
root.Left.Right = &TreeNode{Val: 1}
root.Right.Right = &TreeNode{Val: -25}
root.Right.Right.Left = &TreeNode{Val: 3}
root.Right.Right.Right = &TreeNode{Val: 4}
fmt.Printf("二叉树的最大路径和为: %d\n", maxPathSum(root))
}