Решение
class Solution {
fun averageOfLevels(root: TreeNode?): List<Double> {
if (root == null) return emptyList()
val res = ArrayList<Double>()
var cap = 1024
var q = arrayOfNulls<TreeNode>(cap)
var head = 0
var tail = 0
var size = 0
fun en(x: TreeNode) {
if (size == cap) {
val nq = arrayOfNulls<TreeNode>(cap shl 1)
var i = 0
while (i < size) {
nq[i] = q[(head + i) and (cap - 1)]
i++
}
q = nq
cap = cap shl 1
head = 0
tail = size
}
q[tail] = x
tail = (tail + 1) and (cap - 1)
size++
}
fun de(): TreeNode {
val x = q[head]!!
q[head] = null
head = (head + 1) and (cap - 1)
size--
return x
}
en(root)
while (size > 0) {
val level = size
var sum = 0L
var i = 0
while (i < level) {
val n = de()
sum += n.`val`
n.left?.let { en(it) }
n.right?.let { en(it) }
i++
}
res.add(sum.toDouble() / level)
}
return res
}
}