The top view of a binary tree is the set of nodes visible when the tree is seen from above. It includes the nodes that are the first at each horizontal distance from the root.
Click to reveal answer
beginner
How do we determine the horizontal distance (HD) of nodes in a binary tree?
The root node has HD = 0. For any node, its left child has HD = parent's HD - 1, and its right child has HD = parent's HD + 1.
Click to reveal answer
intermediate
Which data structure is commonly used to find the top view of a binary tree?
A queue is used for level order traversal, and a map/dictionary stores the first node encountered at each horizontal distance.
Click to reveal answer
intermediate
Why do we store only the first node at each horizontal distance when finding the top view?
Because the first node encountered at a horizontal distance during level order traversal is the topmost node visible from above at that horizontal distance.
Click to reveal answer
intermediate
What is the time complexity of finding the top view of a binary tree?
The time complexity is O(n), where n is the number of nodes, because each node is visited once during level order traversal.
Click to reveal answer
What is the horizontal distance of the root node in a binary tree?
A0
B1
C-1
DDepends on the tree height
✗ Incorrect
The root node is assigned a horizontal distance of 0 by definition.
Which traversal method is best suited to find the top view of a binary tree?
AInorder traversal
BPreorder traversal
CPostorder traversal
DLevel order traversal
✗ Incorrect
Level order traversal visits nodes level by level, which helps identify the first node at each horizontal distance.
When two nodes share the same horizontal distance, which node is included in the top view?
AThe one at the higher level
BThe one at the lower level
CThe rightmost node
DThe leftmost node
✗ Incorrect
The node at the higher (closer to root) level is visible from the top.
What data structure is used to keep track of nodes at each horizontal distance?
AStack
BQueue
CMap or dictionary
DLinked list
✗ Incorrect
A map/dictionary stores the first node encountered at each horizontal distance.
What is the output of the top view for a tree with nodes 1 (root), 2 (left child), and 3 (right child)?
A1 -> 2 -> 3
B2 -> 1 -> 3
C1 only
D2 -> 3
✗ Incorrect
From top view, nodes 2, 1, and 3 are visible from left to right.
Explain how to find the top view of a binary tree step-by-step.
Think about how you see the tree from above and which nodes block others.
You got /5 concepts.
Why is level order traversal important for the top view of a binary tree?
Consider how nodes appear from top and which nodes hide others.
You got /4 concepts.
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 above
D. Nodes visible when the tree is viewed from the right side
Solution
Step 1: Understand the top view concept
The top view of a binary tree includes all nodes visible when looking down vertically from above the tree.
Step 2: Differentiate from other views
Left or right views show nodes from side angles, while top view shows nodes from above.
Final Answer:
Nodes visible when the tree is viewed from above -> Option C
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
Including all leaf nodes as top view
Thinking top view shows all nodes
2. Which Go data structure is best suited to store nodes for computing the top view of a binary tree?
easy
A. Map with horizontal distance as key
B. Array
C. Slice
D. Linked list
Solution
Step 1: Identify the need for horizontal distance mapping
Top view requires tracking nodes by their horizontal distance from root to avoid duplicates.
Step 2: Choose data structure supporting key-value pairs
A map with horizontal distance as key stores the first node at each horizontal distance efficiently.
Final Answer:
Map with horizontal distance as key -> Option A
Quick Check:
Use map for horizontal distance keys [OK]
Hint: Use map keyed by horizontal distance for top view [OK]
Common Mistakes:
Using slice or array without horizontal distance keys
Using linked list which lacks key access
Ignoring horizontal distance concept
3. Given the following Go code snippet for top view, what will be printed?
type Node struct {
Val int
Left, Right *Node
}
func topView(root *Node) []int {
if root == nil {
return []int{}
}
type pair struct { node *Node; hd int }
queue := []pair{{root, 0}}
m := map[int]int{}
res := []int{}
for len(queue) > 0 {
p := queue[0]
queue = queue[1:]
if _, ok := m[p.hd]; !ok {
m[p.hd] = p.node.Val
}
if p.node.Left != nil {
queue = append(queue, pair{p.node.Left, p.hd - 1})
}
if p.node.Right != nil {
queue = append(queue, pair{p.node.Right, p.hd + 1})
}
}
keys := []int{}
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
res = append(res, m[k])
}
return res
}
root := &Node{Val: 1}
root.Left = &Node{Val: 2}
root.Right = &Node{Val: 3}
root.Left.Right = &Node{Val: 4}
root.Left.Right.Right = &Node{Val: 5}
root.Left.Right.Right.Right = &Node{Val: 6}
fmt.Println(topView(root))
medium
A. [2 1 3]
B. [2 1 3 6]
C. [2 1 4 5 6]
D. [1 2 3 4 5 6]
Solution
Step 1: Traverse nodes with horizontal distances
Root(1) at hd=0, Left(2) at hd=-1, Right(3) at hd=1, Left.Right(4) at hd=0 (ignored), Left.Right.Right(5) at hd=1 (ignored), Left.Right.Right.Right(6) at hd=2.
Step 2: Collect first nodes at each horizontal distance
hd=-1:2, hd=0:1, hd=1:3, hd=2:6
Final Answer:
[2 1 3 6] -> Option B
Quick Check:
Top view nodes by hd sorted: 2,1,3,6 [OK]
Hint: First node at each horizontal distance forms top view [OK]
Common Mistakes:
Including nodes overwritten at same horizontal distance
Ignoring horizontal distance ordering
Confusing top view with level order
4. The following Go code attempts to compute the top view of a binary tree but has a bug. What is the bug?
func topView(root *Node) []int {
if root == nil {
return []int{}
}
type pair struct { node *Node; hd int }
queue := []pair{{root, 0}}
m := map[int]int{}
res := []int{}
for len(queue) > 0 {
p := queue[0]
queue = queue[1:]
m[p.hd] = p.node.Val
if p.node.Left != nil {
queue = append(queue, pair{p.node.Left, p.hd - 1})
}
if p.node.Right != nil {
queue = append(queue, pair{p.node.Right, p.hd + 1})
}
}
keys := []int{}
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
res = append(res, m[k])
}
return res
}
medium
A. It overwrites nodes at the same horizontal distance, losing top view nodes
B. It does not handle nil root properly
C. It uses a slice instead of a queue
D. It does not sort the keys before output
Solution
Step 1: Analyze map assignment inside loop
The code assigns m[p.hd] = p.node.Val every time, overwriting previous values at same horizontal distance.
Step 2: Understand top view requirement
Top view requires storing only the first node encountered at each horizontal distance, so overwriting causes incorrect output.
Final Answer:
It overwrites nodes at the same horizontal distance, losing top view nodes -> Option A
Quick Check:
Overwrite causes wrong top view [OK]
Hint: Store first node per horizontal distance only [OK]
Common Mistakes:
Overwriting map entries instead of checking existence
Ignoring horizontal distance uniqueness
Not sorting keys before output
5. You have a binary tree where multiple nodes share the same horizontal distance and level. How should you modify the top view algorithm to always show the node with the smallest value at each horizontal distance?
hard
A. Store the last node encountered at each horizontal distance regardless of value
B. Use a stack instead of a queue for traversal
C. Ignore horizontal distance and print all nodes at the top level
D. Store the node with the smallest value for each horizontal distance, updating if a smaller value is found
Solution
Step 1: Understand the problem with duplicates
When nodes share horizontal distance and level, top view must pick one node per horizontal distance.
Step 2: Modify map to track smallest value
Instead of storing first node only, update stored node if a smaller value is found at the same horizontal distance.
Step 3: Implement comparison logic
Check if current node's value is smaller than stored; if yes, replace it in the map.
Final Answer:
Store the node with the smallest value for each horizontal distance, updating if a smaller value is found -> Option D
Quick Check:
Keep smallest value per horizontal distance [OK]
Hint: Update map only if new node value is smaller [OK]
Common Mistakes:
Ignoring node values when duplicates occur
Using last node instead of smallest value
Changing traversal order instead of map logic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.