Tree Traversal Target: 15s
The for-range-len(q) trick processes one level at a time. Without it you get plain BFS without level grouping.
from collections import deque
q = deque([root])
result = []
while q:
level = []
for _ in range(len(q)):
node = q.popleft()
level.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
result.append(level)
Type it from memory. Go.