Bird
Raised Fist0
DSA Goprogramming~10 mins

Top View of Binary Tree in DSA Go - Interactive Practice

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

Complete the code to create a new queue for BFS traversal.

DSA Go
queue := make(chan *Node, [1])
Drag options to blanks, or click blank then click option'
A0
B1
C100
D10
Attempts:
3 left
💡 Hint
Common Mistakes
Using zero capacity channel causes deadlock.
Using capacity 1 is too small for BFS queue.
2fill in blank
medium

Complete the code to update the horizontal distance map only if the distance is not already present.

DSA Go
if _, ok := hdMap[hd]; ![1] { hdMap[hd] = node.data }
Drag options to blanks, or click blank then click option'
Aok
Bexists
Cfound
Dpresent
Attempts:
3 left
💡 Hint
Common Mistakes
Using variable names other than 'ok' for map presence check.
Not negating the condition to insert only once.
3fill in blank
hard

Fix the error in the BFS loop to correctly update horizontal distance and enqueue children.

DSA Go
for len(queue) > 0 {
    node := <-queue
    hd := [1][node]
    if _, ok := hdMap[hd]; !ok {
        hdMap[hd] = node.data
    }
    if node.left != nil {
        queue <- node.left
        [2][node.left] = hd - 1
    }
    if node.right != nil {
        queue <- node.right
        hdDist[node.right] = hd + 1
    }
}
Drag options to blanks, or click blank then click option'
AhdMap
BhdDist
Cdistance
Dhd
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'hdMap' to store horizontal distances causes wrong data.
Not updating horizontal distances for children.
4fill in blank
hard

Fill both blanks to correctly initialize the horizontal distance map and enqueue the root node.

DSA Go
hdDist := make(map[*Node]int)
hdDist[[1]] = 0
queue <- [2]
Drag options to blanks, or click blank then click option'
Aroot
Bhead
CrootNode
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names for root causes errors.
Not initializing horizontal distance for root.
5fill in blank
hard

Fill all three blanks to print the top view nodes in order of horizontal distance.

DSA Go
keys := make([]int, 0, len(hdMap))
for k := range hdMap {
    keys = append(keys, k)
}
sort.[1](sort.IntSlice(keys))
for _, k := range keys {
    fmt.[2](hdMap[k], " ")
}
fmt.[3]()
Drag options to blanks, or click blank then click option'
ASortInts
BPrintln
CPrint
DSort
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong sort function causes compile error.
Using fmt.Println inside loop prints each node on new line.

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

  1. 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.
  2. Step 2: Differentiate from other views

    Left or right views show nodes from side angles, while top view shows nodes from above.
  3. Final Answer:

    Nodes visible when the tree is viewed from above -> Option C
  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
  • 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

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

    Top view requires tracking nodes by their horizontal distance from root to avoid duplicates.
  2. 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.
  3. Final Answer:

    Map with horizontal distance as key -> Option A
  4. 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

  1. 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.
  2. Step 2: Collect first nodes at each horizontal distance

    hd=-1:2, hd=0:1, hd=1:3, hd=2:6
  3. Final Answer:

    [2 1 3 6] -> Option B
  4. 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

  1. 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.
  2. Step 2: Understand top view requirement

    Top view requires storing only the first node encountered at each horizontal distance, so overwriting causes incorrect output.
  3. Final Answer:

    It overwrites nodes at the same horizontal distance, losing top view nodes -> Option A
  4. 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

  1. Step 1: Understand the problem with duplicates

    When nodes share horizontal distance and level, top view must pick one node per horizontal distance.
  2. 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.
  3. Step 3: Implement comparison logic

    Check if current node's value is smaller than stored; if yes, replace it in the map.
  4. Final Answer:

    Store the node with the smallest value for each horizontal distance, updating if a smaller value is found -> Option D
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard