lc-go/solutions/13/q1339/solution.go
2026-01-07 18:04:39 +09:00

45 lines
776 B
Go

package q1339
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func sumSumTrees(node *TreeNode) int {
if node == nil {
return 0
}
node.Val += sumSumTrees(node.Left) + sumSumTrees(node.Right)
return node.Val
}
func findNearest(node *TreeNode, target int) int {
if node == nil {
return -1
}
ret := node.Val
l, r := findNearest(node.Left, target), findNearest(node.Right, target)
if abs(l-target) < abs(ret-target) {
ret = l
}
if abs(r-target) < abs(ret-target) {
ret = r
}
return ret
}
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func maxProduct(root *TreeNode) int {
totalSum := sumSumTrees(root)
nearest := findNearest(root, totalSum/2)
return nearest * (totalSum - nearest) % (1e9 + 7)
}
var _ = maxProduct