Bird
Raised Fist0
DSA C++programming~10 mins

Vertical Order Traversal of Binary Tree in DSA C++ - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a map that stores nodes by their vertical column index.

DSA C++
std::map<int, std::vector<int>> [1];
Drag options to blanks, or click blank then click option'
AverticalOrder
BnodeMap
CcolumnTable
DtreeMap
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that does not reflect the purpose, like 'treeMap'.
Using an invalid variable name.
2fill in blank
medium

Complete the code to push the current node's value into the vector for its column in the map.

DSA C++
verticalOrder[[1]].push_back(node->val);
Drag options to blanks, or click blank then click option'
Arow
Bcolumn
Clevel
Dindex
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'row' or 'level' which represent vertical depth, not horizontal position.
Using an undefined variable.
3fill in blank
hard

Fix the error in the queue push operation to add the left child with updated column and row.

DSA C++
if (node->left) q.push({node->left, [1], [2]);
Drag options to blanks, or click blank then click option'
Acolumn - 1
Brow + 1
Ccolumn + 1
Drow - 1
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping row and column updates.
Increasing column for left child.
4fill in blank
hard

Fill both blanks to sort nodes first by row, then by value within each column.

DSA C++
std::sort(verticalOrder[[1]].begin(), verticalOrder[[2]].end());
Drag options to blanks, or click blank then click option'
Acolumn
Brow
Dvalue
Attempts:
3 left
💡 Hint
Common Mistakes
Using different keys for begin() and end().
Sorting by row which is not stored in the vector.
5fill in blank
hard

Fill all three blanks to build the final result vector from the map.

DSA C++
for (auto& [1] : verticalOrder) {
    result.push_back([2].second);
}
return [3];
Drag options to blanks, or click blank then click option'
AcolumnPair
Cresult
DverticalOrder
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong variable names in the loop.
Returning the map instead of the result vector.

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

  1. 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.
  2. Step 2: Compare with other traversals

    Level order visits nodes by depth, preorder and inorder are depth-first traversals, not grouped by vertical columns.
  3. Final Answer:

    Nodes are grouped by their vertical columns from left to right -> Option D
  4. 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

  1. 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.
  2. Step 2: Choose appropriate C++ container

    std::map maps column indices to vectors of node values, maintaining sorted order of columns automatically.
  3. Final Answer:

    std::map -> Option C
  4. 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

  1. 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.
  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].
  3. Final Answer:

    [4, 2, 1, 3, 5] -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    It does not handle empty tree (root == nullptr) -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    Use map> to store nodes by column and depth -> Option B
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard