--- title: '102. Binary Tree Level Order Traversal' description: 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) icon: dot sidebar: label: 'Binary Tree Level Order Traversal' badge: 'Medium' --- Tree ### 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: - The number of nodes in the tree is in the range [0, 2000]. - `-1000 <= Node.val <= 1000` ## Approach ```mermaid flowchart TD S(["levelOrder(root)"]) --> I["res = [], q = deque(), q.append(root)"] I --> W{"q non-empty?"} W -- no --> E(["return res"]) W -- yes --> L["qLen = len(q), level = [] — qLen freezes the current level's size"] L --> F{"more i in range(qLen)?"} F -- no --> V{"level non-empty?"} V -- yes --> A["res.append(level)"] A --> W V -- no --> W F -- yes --> P["node = q.popleft()"] P --> N{"node is not None?"} N -- no --> F N -- yes --> C["level.append(node.val), q.append(node.left), q.append(node.right) — None children are filtered on the next level"] C --> F ``` ## Solution ```py # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right from collections import deque class Solution: # T: O(n) S: O(n) def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: res = [] q = deque() q.append(root) while q: qLen = len(q) level = [] for i in range(qLen): node = q.popleft() if node: level.append(node.val) q.append(node.left) q.append(node.right) if level: res.append(level) return res ``` ## Explanation