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 horizontal distances (HD) to nodes in Vertical Order Traversal?
The root node is assigned HD = 0. For any node, its left child has HD = parent's HD - 1, and right child has HD = parent's HD + 1.
Click to reveal answer
intermediate
Which data structure is commonly used to store nodes by their horizontal distance during Vertical Order Traversal?
A map (or dictionary) where keys are horizontal distances and values are lists of nodes at that distance.
Click to reveal answer
intermediate
Why do we use a queue in the Vertical Order Traversal algorithm?
A queue helps perform level order traversal (breadth-first search) to visit nodes level by level, ensuring correct vertical grouping.
Click to reveal answer
advanced
What is the output order of nodes in Vertical Order Traversal when multiple nodes share the same horizontal distance and level?
Nodes are output in the order they appear in the level order traversal, i.e., from top to bottom and left to right within the same vertical line.
Click to reveal answer
In Vertical Order Traversal, what horizontal distance is assigned to the root node?
A1
B0
C-1
DDepends on tree height
✗ Incorrect
The root node is always assigned horizontal distance 0.
Which traversal method is used to visit nodes in Vertical Order Traversal?
APreorder
BInorder
CLevel order (BFS)
DPostorder
✗ Incorrect
Level order traversal (using a queue) is used to visit nodes level by level.
What data structure is best to store nodes grouped by their horizontal distance?
ALinked list
BStack
CArray
DMap or dictionary
✗ Incorrect
A map/dictionary stores nodes by horizontal distance keys efficiently.
If a node is at horizontal distance 2, where is it located relative to the root?
ATwo steps right
BTwo steps left
CAt root
DCannot determine
✗ Incorrect
Positive horizontal distance means right side of the root.
How are nodes ordered when multiple nodes share the same horizontal distance and level?
AOrder of appearance in level order traversal
BRandom order
CSorted by depth
DSorted by value
✗ Incorrect
Nodes are output in the order they appear in level order traversal.
Explain the steps to perform Vertical Order Traversal of a binary tree.
Think about how to visit nodes and group them by vertical lines.
You got /4 concepts.
Describe how horizontal distances change when moving to left and right children in a binary tree.
Consider the root as center and left/right as steps left or right.
You got /3 concepts.
Practice
(1/5)
1. What does vertical order traversal of a binary tree mean?
easy
A. Nodes are visited level by level from top to bottom
B. Nodes are visited in inorder (left, root, right)
C. Nodes are visited in preorder (root, left, right)
D. Nodes are grouped by their vertical columns from left to right
Solution
Step 1: Understand vertical order traversal concept
Vertical order traversal groups nodes by their vertical columns, where nodes in the same vertical line share the same horizontal distance from the root.
Step 2: Compare with other traversals
Level order visits nodes by depth, preorder and inorder are depth-first traversals, not grouped by vertical columns.
Final Answer:
Nodes are grouped by their vertical columns from left to right -> Option D
Quick Check:
Vertical order = group by vertical columns [OK]
Hint: Vertical order groups nodes by vertical columns [OK]
Common Mistakes:
Confusing vertical order with level order traversal
Thinking preorder or inorder is vertical order
Ignoring horizontal distance concept
2. Which C++ data structure is best suited to store nodes grouped by their vertical columns during vertical order traversal?
easy
A. std::vector<int>
B. std::queue<int>
C. std::map
D. std::stack<int>
Solution
Step 1: Identify need to group nodes by vertical column
We need a structure that maps vertical column indices (integers) to lists of node values.
Step 2: Choose appropriate C++ container
std::map maps column indices to vectors of node values, maintaining sorted order of columns automatically.
Final Answer:
std::map -> Option C
Quick Check:
Map column index to node list = std::map [OK]
Hint: Use map to group nodes by column [OK]
Common Mistakes:
Using vector alone loses column indexing
Stack or queue do not map keys to values
Using unordered_map loses column order
3. Given the binary tree:
1
/ \
2 3
/ \
4 5
What is the vertical order traversal output?
medium
A. [4, 2, 1, 3, 5]
B. [4, 2, 1, 5, 3]
C. [1, 2, 3, 4, 5]
D. [2, 4, 1, 3, 5]
Solution
Step 1: Assign horizontal distances (HD) to nodes
Root 1 has HD=0; left child 2 has HD=-1; right child 3 has HD=1; 4 is left of 2 so HD=-2; 5 is right of 3 so HD=2.
Step 2: Group nodes by HD and list in order
HD=-2: [4], HD=-1: [2], HD=0: [1], HD=1: [3], HD=2: [5]. Combine left to right: [4, 2, 1, 3, 5].
Final Answer:
[4, 2, 1, 3, 5] -> Option A
Quick Check:
Vertical order = [4, 2, 1, 3, 5] [OK]
Hint: Assign horizontal distances, then list nodes left to right [OK]
Common Mistakes:
Mixing order of nodes in same vertical column
Ignoring horizontal distance for children
Listing nodes by level order instead
4. Consider this code snippet for vertical order traversal:
void verticalOrder(Node* root) {
map m;
queue> q;
q.push({root, 0});
while (!q.empty()) {
auto p = q.front(); q.pop();
Node* node = p.first;
int hd = p.second;
m[hd].push_back(node->data);
if (node->left) q.push({node->left, hd - 1});
if (node->right) q.push({node->right, hd + 1});
}
for (auto &x : m) {
for (int val : x.second) cout << val << " ";
}
}
What is the bug in this code?
medium
A. It does not handle empty tree (root == nullptr)
B. It uses map instead of unordered_map causing wrong order
C. It pushes right child before left child in queue
D. It does not store horizontal distances correctly
Solution
Step 1: Check for null root before processing
The code assumes root is not null but does not check. If root is nullptr, q.push({root, 0}) pushes null pointer causing runtime error.
Step 2: Verify other parts are correct
Using map keeps columns sorted, order of pushing left then right is correct, horizontal distances are updated properly.
Final Answer:
It does not handle empty tree (root == nullptr) -> Option A
Quick Check:
Missing null root check causes error [OK]
Hint: Always check if root is nullptr before traversal [OK]
Common Mistakes:
Ignoring null root causing crash
Confusing map with unordered_map for order
Swapping left and right child pushes
5. You want to modify vertical order traversal to print nodes sorted by their depth within each vertical column (top to bottom). Which data structure change helps achieve this?
hard
A. Use map and sort vectors after traversal
B. Use map> to store nodes by column and depth
C. Use unordered_map and sort keys later
D. Use queue> only without map
Solution
Step 1: Understand requirement to sort nodes by depth per column
We need to group nodes by vertical column and also by their depth (level) to print top to bottom.
Step 2: Choose data structure to store nodes by column and depth
Using map> allows mapping column -> depth -> list of nodes, preserving order in both dimensions.
Final Answer:
Use map> to store nodes by column and depth -> Option B
Quick Check:
Nested map for column and depth sorting [OK]
Hint: Use nested map to sort nodes by column and depth [OK]
Common Mistakes:
Sorting vectors after traversal is inefficient
Using unordered_map loses order
Ignoring depth dimension in grouping
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.