0
0
DSA Typescriptprogramming~20 mins

Zigzag Level Order Traversal in DSA Typescript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Zigzag Traversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Zigzag Level Order Traversal on a simple tree
What is the output of the zigzag level order traversal for the given binary tree?
DSA Typescript
class TreeNode {
  val: number;
  left: TreeNode | null;
  right: TreeNode | null;
  constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
    this.val = val === undefined ? 0 : val;
    this.left = left === undefined ? null : left;
    this.right = right === undefined ? null : right;
  }
}

function zigzagLevelOrder(root: TreeNode | null): number[][] {
  if (!root) return [];
  const result: number[][] = [];
  let currentLevel: TreeNode[] = [root];
  let leftToRight = true;

  while (currentLevel.length > 0) {
    const levelValues: number[] = [];
    const nextLevel: TreeNode[] = [];

    for (const node of currentLevel) {
      levelValues.push(node.val);
      if (node.left) nextLevel.push(node.left);
      if (node.right) nextLevel.push(node.right);
    }

    if (!leftToRight) levelValues.reverse();
    result.push(levelValues);
    currentLevel = nextLevel;
    leftToRight = !leftToRight;
  }

  return result;
}

// Tree structure:
//     1
//    / \
//   2   3
//  / \   \
// 4   5   6

const root = new TreeNode(1,
  new TreeNode(2, new TreeNode(4), new TreeNode(5)),
  new TreeNode(3, null, new TreeNode(6))
);

console.log(zigzagLevelOrder(root));
A[[1],[3,2],[6,5,4]]
B[[1],[2,3],[4,5,6]]
C[[1],[2,3],[6,5,4]]
D[[1],[3,2],[4,5,6]]
Attempts:
2 left
💡 Hint
Remember that the traversal direction alternates at each level.
Predict Output
intermediate
1:00remaining
Zigzag traversal output for a single-node tree
What is the output of the zigzag level order traversal for a tree with only one node (value 10)?
DSA Typescript
class TreeNode {
  val: number;
  left: TreeNode | null;
  right: TreeNode | null;
  constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
    this.val = val === undefined ? 0 : val;
    this.left = left === undefined ? null : left;
    this.right = right === undefined ? null : right;
  }
}

function zigzagLevelOrder(root: TreeNode | null): number[][] {
  if (!root) return [];
  const result: number[][] = [];
  let currentLevel: TreeNode[] = [root];
  let leftToRight = true;

  while (currentLevel.length > 0) {
    const levelValues: number[] = [];
    const nextLevel: TreeNode[] = [];

    for (const node of currentLevel) {
      levelValues.push(node.val);
      if (node.left) nextLevel.push(node.left);
      if (node.right) nextLevel.push(node.right);
    }

    if (!leftToRight) levelValues.reverse();
    result.push(levelValues);
    currentLevel = nextLevel;
    leftToRight = !leftToRight;
  }

  return result;
}

const root = new TreeNode(10);
console.log(zigzagLevelOrder(root));
A[[10]]
B[]
C[[10],[10]]
D[[0]]
Attempts:
2 left
💡 Hint
A single node means only one level to traverse.
🔧 Debug
advanced
2:00remaining
Identify the error in zigzag traversal code
What error will this code produce when run?
DSA Typescript
function zigzagLevelOrder(root: TreeNode | null): number[][] {
  if (!root) return [];
  const result: number[][] = [];
  let currentLevel: TreeNode[] = [root];
  let leftToRight = true;

  while (currentLevel.length > 0) {
    const levelValues: number[] = [];
    const nextLevel: TreeNode[] = [];

    for (let i = currentLevel.length - 1; i >= 0; i--) {
      const node = currentLevel[i];
      levelValues.push(node.val);
      if (node.left) nextLevel.push(node.left);
      if (node.right) nextLevel.push(node.right);
    }

    if (!leftToRight) levelValues.reverse();
    result.push(levelValues);
    currentLevel = nextLevel;
    leftToRight = !leftToRight;
  }

  return result;
}
ATypeError: Cannot read property 'val' of undefined
BSyntaxError due to missing colon
CThe traversal order is incorrect, but no runtime error
DInfinite loop causing timeout
Attempts:
2 left
💡 Hint
Check how nextLevel nodes are added when iterating backwards.
🧠 Conceptual
advanced
1:30remaining
Why use two stacks in zigzag traversal?
Why is using two stacks a common approach for zigzag level order traversal?
ABecause stacks allow reversing the order of nodes easily at each level
BBecause stacks reduce memory usage compared to queues
CBecause stacks automatically sort nodes by value
DBecause stacks prevent visiting nodes multiple times
Attempts:
2 left
💡 Hint
Think about how to reverse the order of nodes at alternate levels.
🚀 Application
expert
3:00remaining
Zigzag traversal output for an unbalanced tree
Given the unbalanced binary tree below, what is the zigzag level order traversal output? // Tree structure: // 7 // / \ // 9 8 // \ \ // 6 5 // / / // 1 4 // \ // 3
DSA Typescript
class TreeNode {
  val: number;
  left: TreeNode | null;
  right: TreeNode | null;
  constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
    this.val = val === undefined ? 0 : val;
    this.left = left === undefined ? null : left;
    this.right = right === undefined ? null : right;
  }
}

const root = new TreeNode(7,
  new TreeNode(9, null, new TreeNode(6, new TreeNode(1), null)),
  new TreeNode(8, null, new TreeNode(5, new TreeNode(4, null, new TreeNode(3)), null))
);

function zigzagLevelOrder(root: TreeNode | null): number[][] {
  if (!root) return [];
  const result: number[][] = [];
  let currentLevel: TreeNode[] = [root];
  let leftToRight = true;

  while (currentLevel.length > 0) {
    const levelValues: number[] = [];
    const nextLevel: TreeNode[] = [];

    for (const node of currentLevel) {
      levelValues.push(node.val);
      if (node.left) nextLevel.push(node.left);
      if (node.right) nextLevel.push(node.right);
    }

    if (!leftToRight) levelValues.reverse();
    result.push(levelValues);
    currentLevel = nextLevel;
    leftToRight = !leftToRight;
  }

  return result;
}

console.log(zigzagLevelOrder(root));
A[[7],[9,8],[5,6],[1,4],[3]]
B[[7],[8,9],[6,5],[4,1],[3]]
C[[7],[8,9],[5,6],[4,1],[3]]
D[[7],[9,8],[6,5],[1,4],[3]]
Attempts:
2 left
💡 Hint
Follow the zigzag pattern carefully level by level.