43 lines
779 B
Go
43 lines
779 B
Go
package q1161
|
|
|
|
import "math"
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func maxLevelSum(root *TreeNode) int {
|
|
type qElem struct {
|
|
node *TreeNode
|
|
level int
|
|
}
|
|
queue := make([]qElem, 0, 256)
|
|
queue = append(queue, qElem{root, 1})
|
|
|
|
maxSum, maxLvl := math.MinInt, 0
|
|
sum, lvl := 0, 1
|
|
for ; len(queue) > 0; queue = queue[1:] {
|
|
cur := &queue[0]
|
|
if cur.level != lvl {
|
|
if sum > maxSum {
|
|
maxSum, maxLvl = sum, lvl
|
|
}
|
|
sum, lvl = 0, cur.level
|
|
}
|
|
sum += cur.node.Val
|
|
if cur.node.Left != nil {
|
|
queue = append(queue, qElem{cur.node.Left, cur.level + 1})
|
|
}
|
|
if cur.node.Right != nil {
|
|
queue = append(queue, qElem{cur.node.Right, cur.level + 1})
|
|
}
|
|
}
|
|
if sum > maxSum {
|
|
return lvl
|
|
}
|
|
return maxLvl
|
|
}
|
|
|
|
var _ = maxLevelSum
|