Medium
Given the root
of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]
Example 2:
Input: root = [1]
Output: [[1]]
Example 3:
Input: root = []
Output: []
Constraints:
[0, 2000]
.-1000 <= Node.val <= 1000
# Definition for a binary tree node.
#
# defmodule TreeNode do
# @type t :: %__MODULE__{
# val: integer,
# left: TreeNode.t() | nil,
# right: TreeNode.t() | nil
# }
# defstruct val: 0, left: nil, right: nil
# end
defmodule Solution do
@spec level_order(root :: TreeNode.t | nil) :: [[integer]]
def level_order(root) do
solve(compact([root]), [])
end
defp solve([], acc), do: Enum.reverse(acc)
defp solve(layer, acc) do
values = Enum.map(layer, & &1.val)
next_layer = layer |> Enum.flat_map(&[&1.left, &1.right]) |> compact()
solve(next_layer, [values | acc])
end
defp compact(list) do
Enum.reject(list, &is_nil/1)
end
end