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)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
res.append(level)
return res
public List<List<Integer>> levelOrder(TreeNode root){
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
Queue<TreeNode> q=new LinkedList<>(); q.offer(root);
while(!q.isEmpty()){
List<Integer> level=new ArrayList<>();
int size=q.size();
for(int i=0;i<size;i++){
TreeNode node=q.poll(); level.add(node.val);
if(node.left!=null) q.offer(node.left);
if(node.right!=null) q.offer(node.right);
} res.add(level);
} return res;
}
Python deque vs Java LinkedList as Queue. popleft() vs poll().
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)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
res.append(level)
return res
public List<List<Integer>> levelOrder(TreeNode root){
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
Queue<TreeNode> q=new LinkedList<>(); q.offer(root);
while(!q.isEmpty()){
List<Integer> level=new ArrayList<>();
int size=q.size();
for(int i=0;i<size;i++){
TreeNode node=q.poll(); level.add(node.val);
if(node.left!=null) q.offer(node.left);
if(node.right!=null) q.offer(node.right);
} res.add(level);
} return res;
}
1. BFS with queue 2. Process level by level