What is Vertical Order Traversal of a Binary Tree?
It is a way to print the nodes of a binary tree column by column, from left to right. Nodes in the same vertical line are grouped together.
Click to reveal answer
beginner
How do we assign vertical levels to nodes in Vertical Order Traversal?
The root node is at vertical level 0. Left child nodes decrease the vertical level by 1, right child nodes increase it by 1.
Click to reveal answer
intermediate
Which data structure is commonly used to store nodes by their vertical levels during traversal?
A map or dictionary with keys as vertical levels and values as lists of nodes at that level.
Click to reveal answer
intermediate
Why do we use a queue in Vertical Order Traversal?
A queue helps us do a level order traversal (breadth-first) so nodes are processed top to bottom within each vertical line.
Click to reveal answer
advanced
What is the output order when multiple nodes share the same vertical and horizontal level?
They are printed in the order they appear in the level order traversal (top to bottom, left to right).
Click to reveal answer
In Vertical Order Traversal, what vertical level is assigned to the root node?
A1
B0
C-1
DDepends on tree height
✗ Incorrect
The root node is always assigned vertical level 0.
Which data structure is best to keep track of nodes and their vertical levels during traversal?
AStack
BQueue
CSet
DMap/Dictionary
✗ Incorrect
A map/dictionary stores vertical levels as keys and lists of nodes as values.
When traversing the tree, how do you update the vertical level for the right child?
Avertical level
Bvertical level - 1
Cvertical level + 1
Dvertical level * 2
✗ Incorrect
Right child nodes increase the vertical level by 1.
What traversal method is commonly combined with vertical level tracking for this problem?
ALevel order (BFS)
BInorder
CPostorder
DPreorder
✗ Incorrect
Level order traversal ensures nodes are processed top to bottom.
If two nodes share the same vertical and horizontal level, how is their order decided in output?
AOrder of insertion in traversal
BValue size order
CRandom order
DAlphabetical order
✗ Incorrect
They appear in the order they are visited during level order traversal.
Explain how vertical levels are assigned and used in Vertical Order Traversal of a binary tree.
Think about how you move left or right from the root.
You got /4 concepts.
Describe the role of a queue and a map/dictionary in implementing Vertical Order Traversal.
One helps visit nodes in order, the other helps group them.
You got /4 concepts.
Practice
(1/5)
1. What does Vertical Order Traversal of a binary tree mean?
easy
A. Nodes are grouped by their vertical columns from left to right
B. Nodes are visited level by level from top to bottom
C. Nodes are visited in preorder (root, left, right)
D. Nodes are visited in inorder (left, root, right)
Solution
Step 1: Understand vertical columns in a tree
Vertical order groups nodes by their horizontal distance from the root, called columns.
Step 2: Define vertical order traversal
Nodes in the same vertical column are collected and output from leftmost to rightmost column.
Final Answer:
Nodes are grouped by their vertical columns from left to right -> Option A
Quick Check:
Vertical order = group by columns [OK]
Hint: Think columns from left to right, not levels or preorder [OK]
Common Mistakes:
Confusing vertical order with level order traversal
Thinking vertical order is preorder or inorder traversal
Ignoring horizontal distance concept
2. Which TypeScript data structure is best to store nodes by their vertical column during vertical order traversal?
easy
A. Map
B. Set<number>
C. Array<number>
D. string[]
Solution
Step 1: Identify need to map columns to nodes
We need to store nodes grouped by their column index, so a mapping from column number to list of nodes is required.
Step 2: Choose appropriate TypeScript structure
A Map with keys as column numbers and values as arrays of node values fits perfectly.
Final Answer:
Map<number, number[]> -> Option A
Quick Check:
Map column to node list = Map<number, number[]> [OK]
Hint: Use Map to link column numbers to node arrays [OK]
Common Mistakes:
Using Set which does not store duplicates or order
Using plain arrays without column keys
Using string arrays which don't map columns
3. Given this TypeScript code for vertical order traversal, what is the output?
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val: number) {
this.val = val;
this.left = null;
this.right = null;
}
}
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
function verticalOrder(root: TreeNode | null): number[][] {
if (!root) return [];
const map = new Map();
const queue: [TreeNode, number][] = [[root, 0]];
while (queue.length) {
const [node, col] = queue.shift()!;
if (!map.has(col)) map.set(col, []);
map.get(col)!.push(node.val);
if (node.left) queue.push([node.left, col - 1]);
if (node.right) queue.push([node.right, col + 1]);
}
return Array.from(map.entries())
.sort((a, b) => a[0] - b[0])
.map(entry => entry[1]);
}
console.log(verticalOrder(root));
medium
A. [[7], [3], [1, 5, 6], [2], [4]]
B. [[4], [2], [1, 5, 6], [3], [7]]
C. [[1], [2, 3], [4, 5, 6, 7]]
D. [[4], [2, 5], [1, 6], [3, 7]]
Solution
Step 1: Assign columns to nodes during BFS
Root (1) at col 0; left child (2) at -1; right child (3) at +1; and so on. Nodes grouped by columns:
- -2: 4
- -1: 2
- 0: 1, 5, 6
- 1: 3
- 2: 7
Step 2: Sort columns and output node lists
Sorted columns from left to right: -2, -1, 0, 1, 2. Output arrays accordingly.
Final Answer:
[[4], [2], [1, 5, 6], [3], [7]] -> Option B
Quick Check:
Column grouping matches output D [OK]
Hint: Track column indices during BFS, then sort keys [OK]
Common Mistakes:
Mixing up column indices for left/right children
Not sorting columns before output
Using DFS instead of BFS causing wrong order
4. The following TypeScript code for vertical order traversal has a bug. What is the bug?
function verticalOrder(root: TreeNode | null): number[][] {
if (!root) return [];
const map = new Map();
const queue: [TreeNode, number][] = [[root, 0]];
while (queue.length) {
const [node, col] = queue.pop()!;
if (!map.has(col)) map.set(col, []);
map.get(col)!.push(node.val);
if (node.left) queue.push([node.left, col - 1]);
if (node.right) queue.push([node.right, col + 1]);
}
return Array.from(map.entries())
.sort((a, b) => a[0] - b[0])
.map(entry => entry[1]);
}
medium
A. map.get(col) returns undefined
B. Missing check for null root
C. Using queue.pop() causes DFS instead of BFS traversal
D. Sorting map entries is incorrect
Solution
Step 1: Identify queue operation used
The code uses queue.pop(), which removes the last element, making it a stack (DFS) behavior.
Step 2: Explain impact on vertical order traversal
Vertical order requires BFS (level order) to maintain correct node order per column. Using pop() breaks this order.
Final Answer:
Using queue.pop() causes DFS instead of BFS traversal -> Option C
Quick Check:
pop() = DFS, need shift() for BFS [OK]
Hint: Use shift() for BFS queue, not pop() [OK]
Common Mistakes:
Confusing pop() with shift() in queue
Ignoring traversal order effect on output
Assuming map.get always returns array without check
5. You want to modify vertical order traversal to sort nodes within the same column by their row (depth) and then by value ascending. Which approach is best?
hard
A. Traverse tree using DFS only and collect nodes in order
B. Use a Set per column to avoid duplicates
C. Sort nodes globally after traversal ignoring columns
D. Store nodes as tuples (row, value) per column and sort before output
Solution
Step 1: Understand sorting requirement within columns
Nodes in the same column must be sorted first by their row (depth), then by value ascending.
Step 2: Choose data structure to store row and value
Store tuples (row, value) for each node in the column map, then sort these tuples before output.
Step 3: Explain why other options fail
Set ignores duplicates and order; DFS alone doesn't guarantee order; global sort ignores column grouping.
Final Answer:
Store nodes as tuples (row, value) per column and sort before output -> Option D
Quick Check:
Sort by row and value per column = store tuples and sort [OK]
Hint: Keep (row, value) pairs per column, then sort [OK]
Common Mistakes:
Using Set which loses order and duplicates
Relying on DFS without tracking rows
Sorting all nodes ignoring column grouping
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.