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