Given the root of a binary tree, return the level-order traversal of its node values, grouped per level (left-to-right).
Use a queue seeded with the root. At each iteration, snapshot len(queue) — that's the width of the current level — then pop exactly that many nodes, collecting their values into one list while enqueuing their children for the next level.
Example: root = [3,9,20,null,null,15,7] → [[3],[9,20],[15,7]].
[[3],[9,20],[15,7]]