LeetCode-in-All

102. Binary Tree Level Order Traversal

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:

Solution

%% Definition for a binary tree node.
%%
%% -record(tree_node, {val = 0 :: integer(),
%%                     left = null  :: 'null' | #tree_node{},
%%                     right = null :: 'null' | #tree_node{}}).

-spec level_order(Root :: #tree_node{} | null) -> [[integer()]].
level_order(Root) ->
  do({[Root], []}, {[], []}).

do({[], []}, {Last, []}) ->
    Last;
do({[], NextLevel}, {Last, Acc}) ->
    do({NextLevel, []}, {Last ++ [lists:reverse(Acc)], []});
do({[Node| Rest], NextLevel}, {Last, Acc}) ->
    case Node of 
        null ->
            do({Rest, NextLevel}, {Last, Acc});
        #tree_node{left = Left, val = Val, right=Right} ->
            do({Rest , NextLevel ++ [Left, Right]}, {Last, [Val| Acc]})
    end.