0
0
DSA Typescriptprogramming~10 mins

Zigzag Level Order Traversal in DSA Typescript - Execution Trace

Choose your learning style9 modes available
Concept Flow - Zigzag Level Order Traversal
Start at root node
Initialize queue with root
While queue not empty
Process all nodes at current level
Collect node values in order
If level is even: left to right
If level is odd: right to left
Add children of current level nodes to queue
Increase level count
Repeat until queue empty
Return zigzag order list
Start from the root, process nodes level by level using a queue, alternate the order of values collected at each level to create a zigzag pattern.
Execution Sample
DSA Typescript
function zigzagLevelOrder(root: TreeNode | null): number[][] {
  if (!root) return [];
  const result: number[][] = [];
  const queue: TreeNode[] = [root];
  let level = 0;
  while (queue.length) {
    const size = queue.length;
    const currentLevel: number[] = [];
    for (let i = 0; i < size; i++) {
      const node = queue.shift()!;
      if (level % 2 === 0) currentLevel.push(node.val);
      else currentLevel.unshift(node.val);
      if (node.left) queue.push(node.left);
      if (node.right) queue.push(node.right);
    }
    result.push(currentLevel);
    level++;
  }
  return result;
}
This code traverses a binary tree level by level, collecting node values in zigzag order by alternating insertion direction each level.
Execution Table
StepOperationNodes in QueueLevelCurrent Level Nodes ProcessedCurrent Level ValuesQueue After ProcessingVisual State
1Initialize queue with root (1)[1]00/1[][1]Level 0: []
2Process node 1[]01/1[1][2,3]Level 0: [1]
3Add current level values to result[2,3]01/1[1][2,3]Result: [[1]]
4Increase level to 1[2,3]10/2[][2,3]Level 1: []
5Process node 2[3]11/2[2][3,4,5]Level 1: [2] (insert at front)
6Process node 3[4,5]12/2[3,2][4,5,6,7]Level 1: [3,2] (insert at front)
7Add current level values to result[4,5,6,7]12/2[3,2][4,5,6,7]Result: [[1],[3,2]]
8Increase level to 2[4,5,6,7]20/4[][4,5,6,7]Level 2: []
9Process node 4[5,6,7]21/4[4][5,6,7]Level 2: [4]
10Process node 5[6,7]22/4[4,5][6,7]Level 2: [4,5]
11Process node 6[7]23/4[4,5,6][7]Level 2: [4,5,6]
12Process node 7[]24/4[4,5,6,7][]Level 2: [4,5,6,7]
13Add current level values to result[]24/4[4,5,6,7][]Result: [[1],[3,2],[4,5,6,7]]
14Queue empty, end traversal[]30/0[][]Traversal complete
💡 Queue is empty, all levels processed
Variable Tracker
VariableStartAfter Step 2After Step 6After Step 12Final
queue[1][2,3][4,5,6,7][][]
level00123
currentLevel[][1][3,2][4,5,6,7][]
result[][][[1]][[1],[3,2]][[1],[3,2],[4,5,6,7]]
Key Moments - 3 Insights
Why do we use unshift (insert at front) on odd levels instead of push?
Because on odd levels we want to reverse the order of node values to create the zigzag pattern. This is shown in execution_table rows 5 and 6 where values are inserted at the front, reversing their order.
Why do we process all nodes currently in the queue before increasing the level?
Because each level consists of all nodes currently in the queue at the start of the loop iteration. This ensures we collect values level by level, as seen in execution_table rows 2-3 and 5-7.
What happens if the tree is empty (root is null)?
The function returns an empty array immediately, as shown in the code sample line 2: if (!root) return []. No traversal happens.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the order of current level values?
A[2, 3]
B[1]
C[3, 2]
D[4, 5, 6, 7]
💡 Hint
Check the 'Current Level Values' column at step 6 in execution_table
At which step does the queue become empty, ending the traversal?
AStep 12
BStep 14
CStep 13
DStep 10
💡 Hint
Look for the step where 'Queue' column is empty and 'Traversal complete' in Visual State
If we changed the code to always push node values (no unshift), how would the result change?
AAll levels would be left to right order
BAll levels would be right to left order
CThe traversal would stop early
DThe queue would never empty
💡 Hint
Refer to key_moments about why unshift is used on odd levels
Concept Snapshot
Zigzag Level Order Traversal:
- Use a queue to traverse tree level by level
- For even levels, append node values left to right
- For odd levels, insert node values right to left (using unshift)
- Add children to queue for next level
- Repeat until queue empty
- Return list of levels with zigzag order
Full Transcript
Zigzag Level Order Traversal visits nodes of a binary tree level by level, but alternates the order of values collected at each level to create a zigzag pattern. We start with the root node in a queue. While the queue is not empty, we process all nodes currently in the queue as one level. For even levels, we add node values to the current level list from left to right. For odd levels, we insert node values at the front to reverse the order. After processing a level, we add all children of nodes to the queue for the next level. We repeat this until the queue is empty. The final result is a list of lists, each representing a level's node values in zigzag order.