Binary Tree Zigzag Level Order — Alternating Direction BFS

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 362 · Binary Tree Zigzag Level Order Traversal

Difficulty: Medium · Pattern: BFS + Direction Toggle

Solutions

# Python
from collections import deque
def zigzagLevelOrder(root):
    if not root: return []
    queue = deque([root]); result = []; left_to_right = True
    while queue:
        level = deque()
        for _ in range(len(queue)):
            node = queue.popleft()
            if left_to_right: level.append(node.val)
            else: level.appendleft(node.val)
            if node.left: queue.append(node.left)
            if node.right: queue.append(node.right)
        result.append(list(level))
        left_to_right = not left_to_right
    return result
// Java
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    List<List<Integer>> res=new ArrayList<>();
    if (root==null) return res;
    Queue<TreeNode> q=new LinkedList<>(); q.offer(root); boolean ltr=true;
    while (!q.isEmpty()) {
        int sz=q.size(); Deque<Integer> level=new ArrayDeque<>();
        while (sz-->0) {
            TreeNode n=q.poll();
            if(ltr) level.addLast(n.val); else level.addFirst(n.val);
            if(n.left!=null) q.offer(n.left);
            if(n.right!=null) q.offer(n.right);
        }
        res.add(new ArrayList<>(level)); ltr=!ltr;
    }
    return res;
}

Complexity

  • Time: O(n)
  • Space: O(w)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro