Easy
Given the root
of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5
of the actual answer will be accepted.
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: [3.00000,14.50000,11.00000] Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].
Example 2:
Input: root = [3,9,20,15,7]
Output: [3.00000,14.50000,11.00000]
Constraints:
[1, 104]
.-231 <= Node.val <= 231 - 1
import com_github_leetcode.TreeNode
/*
* 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
* }
*/
class Solution {
fun averageOfLevels(root: TreeNode?): List<Double> {
val map: MutableMap<Int, Array<Double>> = HashMap()
helper(root, map, 0)
val result: MutableList<Double> = ArrayList()
for (pair in map.values) {
val avg = pair[1] / pair[0]
result.add(avg)
}
return result
}
private fun helper(root: TreeNode?, map: MutableMap<Int, Array<Double>>, level: Int) {
if (root == null) {
return
}
val pair = if (map.containsKey(level)) map[level]!! else arrayOf(0.0, 0.0)
pair[0] += 1.0
pair[1] = pair[1] + root.`val`
map[level] = pair
helper(root.left, map, level + 1)
helper(root.right, map, level + 1)
}
}