N-ary Tree Level Order Traversal

medium tree bfs

Problem

Given the root of an N-ary tree, return the level-order traversal of its nodes' values as a list of lists.

Inputroot = [1, null, 3, 2, 4, null, 5, 6] // children-list format
Output[[1], [3, 2, 4], [5, 6]]
Level 0 → [1]; Level 1 → children of 1; Level 2 → grandchildren in order.

from collections import deque

def level_order(root):
    if not root: return []
    res, q = [], deque([root])
    while q:
        level = []
        for _ in range(len(q)):
            node = q.popleft()
            level.append(node.val)
            for child in node.children:
                q.append(child)
        res.append(level)
    return res
function levelOrder(root) {
  if (!root) return [];
  const res = [];
  let q = [root];
  while (q.length) {
    const level = [], next = [];
    for (const node of q) {
      level.push(node.val);
      for (const c of node.children) next.push(c);
    }
    res.push(level);
    q = next;
  }
  return res;
}
class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) return res;
        Queue<Node> q = new ArrayDeque<>();
        q.offer(root);
        while (!q.isEmpty()) {
            int size = q.size();
            List<Integer> level = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                Node node = q.poll();
                level.add(node.val);
                for (Node c : node.children) q.offer(c);
            }
            res.add(level);
        }
        return res;
    }
}
vector<vector<int>> levelOrder(Node* root) {
    vector<vector<int>> res;
    if (!root) return res;
    queue<Node*> q;
    q.push(root);
    while (!q.empty()) {
        int size = q.size();
        vector<int> level;
        for (int i = 0; i < size; i++) {
            Node* node = q.front(); q.pop();
            level.push_back(node->val);
            for (auto c : node->children) q.push(c);
        }
        res.push_back(level);
    }
    return res;
}
Time: O(n) Space: O(w) — w = max level width