https://leetcode.com/problems/average-of-levels-in-binary-tree | Easy |
---|
Дано бинарное дерево. Найдите среднее значение элементов на каждом уровне дерева и верните его в виде массива.
Input:
root = [3, 9, 20, null, null, 15, 7]Output:
[3.00000, 14.50000, 11.00000]Explanation:
Среднее на уровне 0 = 3, на уровне 1 = (9 + 20) / 2 = 14.5, на уровне 2 = (15 + 7) / 2 = 11.
Input:
root = [3, 9, 20, 15, 7]Output:
[3.00000, 14.50000, 11.00000]
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
fun averageOfLevels(root: TreeNode?): DoubleArray {
val result = mutableListOf<Double>()
if (root == null) return doubleArrayOf()
val queue: ArrayDeque<TreeNode> = ArrayDeque()
queue.add(root)
while (queue.isNotEmpty()) {
val levelSize = queue.size
var sum = 0.0
for (i in 0 until levelSize) {
val node = queue.removeFirst()
sum += node.`val`
node.left?.let { queue.add(it) } // Добавляем левое поддерево, если есть
node.right?.let { queue.add(it) } // Добавляем правое поддерево, если есть
}
result.add(sum / levelSize) // Вычисляем среднее для текущего уровня
}
return result.toDoubleArray()
}
O(n), где n — количество узлов в дереве, так как каждый узел обрабатывается один раз.
O(m), где m — максимальное количество узлов на одном уровне дерева (ширина дерева).