Bird
Raised Fist0
DSA C++programming~10 mins

Top View of Binary Tree in DSA C++ - Execution Trace

Choose your learning style10 modes available
Concept Flow - Top View of Binary Tree
Start at root node
↓
Assign horizontal distance = 0
↓
Use queue for level order traversal
↓
Pop node from queue
↓
Check if horizontal distance seen before?
↓
Print/store node
↓
Add left child with hd-1 to queue
↓
Add right child with hd+1 to queue
↓
Repeat until queue empty
↓
Output collected nodes in order of horizontal distance
Traverse the tree level by level, track horizontal distances, and print the first node seen at each horizontal distance to get the top view.
Execution Sample
DSA C++
struct Node {
  int data;
  Node* left;
  Node* right;
};

void topView(Node* root) {
  // Implementation
}
This code prints the top view of a binary tree by level order traversal with horizontal distance tracking.
Execution Table
StepOperationNode Visited (data)Horizontal Distance (hd)Queue State (node:hd)Top View Map (hd:data)Visual State
1Start at root10[ (1:0) ]{}Tree: 1 Queue: 1:0 TopView: {}
2Pop node10[]{0:1}Tree: 1 Queue: empty TopView: 0->1
3Add left child2-1[ (2:-1) ]{0:1}Tree: 1 Queue: 2:-1 TopView: 0->1
4Add right child31[ (2:-1), (3:1) ]{0:1}Tree: 1 Queue: 2:-1,3:1 TopView: 0->1
5Pop node2-1[ (3:1) ]{0:1, -1:2}Tree: 1 Queue: 3:1 TopView: -1->2,0->1
6Add left child4-2[ (3:1), (4:-2) ]{0:1, -1:2}Tree: 1 Queue: 3:1,4:-2 TopView: -1->2,0->1
7Add right child50[ (3:1), (4:-2), (5:0) ]{0:1, -1:2}Tree: 1 Queue: 3:1,4:-2,5:0 TopView: -1->2,0->1
8Pop node31[ (4:-2), (5:0) ]{0:1, -1:2, 1:3}Tree: 1 Queue: 4:-2,5:0 TopView: -1->2,0->1,1->3
9Add left child60[ (4:-2), (5:0), (6:0) ]{0:1, -1:2, 1:3}Tree: 1 Queue: 4:-2,5:0,6:0 TopView: -1->2,0->1,1->3
10Add right child72[ (4:-2), (5:0), (6:0), (7:2) ]{0:1, -1:2, 1:3}Tree: 1 Queue: 4:-2,5:0,6:0,7:2 TopView: -1->2,0->1,1->3
11Pop node4-2[ (5:0), (6:0), (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 5:0,6:0,7:2 TopView: -2->4,-1->2,0->1,1->3
12No children to add--[ (5:0), (6:0), (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 5:0,6:0,7:2 TopView: -2->4,-1->2,0->1,1->3
13Pop node50[ (6:0), (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 6:0,7:2 TopView: -2->4,-1->2,0->1,1->3
14No children to add--[ (6:0), (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 6:0,7:2 TopView: -2->4,-1->2,0->1,1->3
15Pop node60[ (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 7:2 TopView: -2->4,-1->2,0->1,1->3
16No children to add--[ (7:2) ]{0:1, -1:2, 1:3, -2:4}Tree: 1 Queue: 7:2 TopView: -2->4,-1->2,0->1,1->3
17Pop node72[]{0:1, -1:2, 1:3, -2:4, 2:7}Tree: 1 Queue: empty TopView: -2->4,-1->2,0->1,1->3,2->7
18No children to add--[]{0:1, -1:2, 1:3, -2:4, 2:7}Tree: 1 Queue: empty TopView: -2->4,-1->2,0->1,1->3,2->7
19Queue empty--[]{0:1, -1:2, 1:3, -2:4, 2:7}Traversal complete, top view collected
💡 Queue is empty, all nodes processed
Variable Tracker
VariableStartAfter Step 2After Step 5After Step 8After Step 11After Step 17Final
Queue[ (1:0) ][][ (3:1) ][ (4:-2), (5:0) ][ (5:0), (6:0), (7:2) ][][]
Top View Map{}{0:1}{0:1, -1:2}{0:1, -1:2, 1:3}{0:1, -1:2, 1:3, -2:4}{0:1, -1:2, 1:3, -2:4, 2:7}{0:1, -1:2, 1:3, -2:4, 2:7}
Key Moments - 3 Insights
Why do we only add a node to the top view map if its horizontal distance is not already present?
Because the top view shows the first node visible at each horizontal distance from the top. Later nodes at the same horizontal distance are hidden behind the first one. See execution_table steps 2, 5, and 8 where nodes are added only if hd is new.
Why do we use a queue and level order traversal instead of DFS?
Level order traversal ensures we visit nodes top-down, so the first node at each horizontal distance is the topmost. DFS might visit lower nodes first, causing incorrect top view. This is shown in the queue states in execution_table.
What does the horizontal distance represent and how is it updated?
Horizontal distance (hd) is the relative position from root: root is 0, left child is hd-1, right child is hd+1. This helps group nodes vertically. See execution_table steps 3, 4, 6, 7 for hd updates.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 5. What is the top view map after visiting node 2?
A{0:1, -1:2}
B{0:1}
C{-1:2}
D{}
💡 Hint
Check the 'Top View Map' column at step 5 in execution_table.
At which step does the horizontal distance 2 first appear in the top view map?
AStep 11
BStep 17
CStep 8
DStep 2
💡 Hint
Look for when hd=2 is added to 'Top View Map' in execution_table.
If the node with data 5 had a left child, how would the queue state change after step 14?
AA new node with hd= -1 would be added to the queue
BA new node with hd= 1 would be added to the queue
CA new node with hd= 0 would be added to the queue
DNo change to the queue
💡 Hint
Children's hd is parent's hd ± 1; node 5 has hd=0, so left child hd=0-1= -1, right child hd=0+1=1.
Concept Snapshot
Top View of Binary Tree:
- Use level order traversal with a queue
- Track horizontal distance (hd) for each node
- For each hd, store first node encountered
- Left child hd = parent hd - 1
- Right child hd = parent hd + 1
- Output nodes sorted by hd for top view
Full Transcript
To find the top view of a binary tree, we start at the root node with horizontal distance zero. We use a queue to do a level order traversal, visiting nodes level by level. For each node, we check if its horizontal distance has been seen before. If not, we add it to the top view map. We add left and right children to the queue with horizontal distances decreased or increased by one respectively. We continue until the queue is empty. The top view is the collection of first nodes seen at each horizontal distance, printed from leftmost to rightmost. This method ensures we see the topmost nodes when looking from above the tree.

Practice

(1/5)
1. What does the top view of a binary tree represent?
easy
A. All leaf nodes of the tree
B. Nodes visible when the tree is viewed from the left side
C. Nodes visible when the tree is viewed from the right side
D. Nodes visible when the tree is viewed from above

Solution

  1. Step 1: Understand the meaning of top view

    The top view of a binary tree shows nodes that are visible when looking down vertically from above the tree.
  2. Step 2: Compare with other views

    Left or right views show nodes visible from sides, and leaf nodes are only the bottom nodes, so they are different.
  3. Final Answer:

    Nodes visible when the tree is viewed from above -> Option D
  4. Quick Check:

    Top view = nodes seen from above [OK]
Hint: Top view shows nodes visible from above only [OK]
Common Mistakes:
  • Confusing top view with left or right view
  • Thinking top view shows all leaf nodes
  • Assuming top view includes hidden nodes
2. Which C++ STL container is best suited to store nodes by their horizontal distance for top view calculation?
easy
A. std::map
B. std::stack
C. std::vector
D. std::queue

Solution

  1. Step 1: Identify the need for horizontal distance mapping

    Top view requires storing nodes by their horizontal distance from root, which can be negative or positive keys.
  2. Step 2: Choose container supporting key-value pairs with sorted keys

    std::map stores keys in sorted order and allows negative keys, unlike vector which uses indices starting at 0.
  3. Final Answer:

    std::map -> Option A
  4. Quick Check:

    Use map for horizontal distance keys [OK]
Hint: Use map to store nodes by horizontal distance [OK]
Common Mistakes:
  • Using vector which can't handle negative keys
  • Using stack or queue which don't map keys
  • Not sorting nodes by horizontal distance
3. What is the output of the top view for the following binary tree?

        1
       / \
      2   3
       \   \
        4   5
         \   \
          6   7
medium
A. [2, 1, 3, 5, 7]
B. [2, 1, 4, 6, 7]
C. [2, 1, 3, 4, 5]
D. [1, 2, 3, 4, 5, 6, 7]

Solution

  1. Step 1: Assign horizontal distances (HD) to nodes

    Root 1 has HD=0; left child 2 is HD=-1; right child 3 is HD=1; 4 is right of 2 so HD=0; 5 is right of 3 so HD=2; 6 is right of 4 so HD=1; 7 is right of 5 so HD=3.
  2. Step 2: Select first node at each HD from top to bottom

    HD=-1: 2; HD=0: 1; HD=1: 3; HD=2: 5; HD=3: 7. Nodes 4 and 6 are hidden behind 1 and 3 respectively.
  3. Final Answer:

    [2, 1, 3, 5, 7] -> Option A
  4. Quick Check:

    Top view nodes by HD = [2,1,3,5,7] [OK]
Hint: Pick first node at each horizontal distance [OK]
Common Mistakes:
  • Including nodes hidden behind others at same HD
  • Mixing order of nodes in output
  • Ignoring horizontal distance calculation
4. Identify the error in this C++ snippet for top view calculation:

std::map topViewMap;
std::queue> q;
q.push({root, 0});
while(!q.empty()) {
  auto p = q.front(); q.pop();
  Node* node = p.first;
  int hd = p.second;
  if(topViewMap.find(hd) == topViewMap.end())
    topViewMap[hd] = node->data;
  if(node->left) q.push({node->left, hd - 1});
  if(node->right) q.push({node->right, hd + 1});
}
medium
A. Using std::map instead of unordered_map causes slower lookup
B. Incorrect horizontal distance update for left and right children
C. Not checking if node is nullptr before accessing node->left and node->right
D. Not clearing the queue before starting the loop

Solution

  1. Step 1: Check node pointer usage inside loop

    The code accesses node->left and node->right without verifying if node is nullptr, which can cause runtime errors if node is null.
  2. Step 2: Verify other parts of code

    Horizontal distances are updated correctly; queue is initialized properly; map choice is valid though unordered_map could be faster but not an error.
  3. Final Answer:

    Not checking if node is nullptr before accessing node->left and node->right -> Option C
  4. Quick Check:

    Always check node != nullptr before child access [OK]
Hint: Check node pointer before accessing children [OK]
Common Mistakes:
  • Ignoring nullptr checks causing crashes
  • Confusing horizontal distance updates
  • Assuming map choice causes errors
5. Given a binary tree where multiple nodes share the same horizontal distance and level, which node should appear in the top view?
hard
A. The node with the maximum value at that horizontal distance
B. The node that appears first in level order traversal at that horizontal distance
C. The node that appears last in level order traversal at that horizontal distance
D. The leftmost node at that horizontal distance regardless of level

Solution

  1. Step 1: Understand top view node selection criteria

    Top view shows the first node encountered at each horizontal distance when traversing level by level (top to bottom, left to right).
  2. Step 2: Clarify why first node in level order is chosen

    Because level order visits nodes by increasing depth, the first node at a horizontal distance is the topmost visible node.
  3. Final Answer:

    The node that appears first in level order traversal at that horizontal distance -> Option B
  4. Quick Check:

    Top view = first node per horizontal distance in level order [OK]
Hint: Pick first node at horizontal distance in level order [OK]
Common Mistakes:
  • Choosing node by max value instead of position
  • Picking last node instead of first in level order
  • Ignoring level order traversal importance
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