Bird
Raised Fist0
DSA Pythonprogramming~30 mins

Bottom View of Binary Tree in DSA Python - Build from Scratch

Choose your learning style10 modes available
Bottom View of Binary Tree
📖 Scenario: Imagine you have a tree of family members shown vertically. You want to see who is visible if you look from the bottom. This means you see the lowest member at each horizontal position.
🎯 Goal: Build a program to find the bottom view of a binary tree. The bottom view shows the nodes visible when the tree is seen from below, from left to right.
📋 What You'll Learn
Create a binary tree using a Node class with data, left, and right attributes
Use a dictionary to track the bottom-most node at each horizontal distance
Use a queue to perform level order traversal with horizontal distance tracking
Print the bottom view nodes from leftmost to rightmost horizontal distance
💡 Why This Matters
🌍 Real World
Bottom view of a binary tree helps in visualizing hierarchical data from a different perspective, useful in network routing, organizational charts, and graphical representations.
💼 Career
Understanding tree traversals and views is important for software engineers working with data structures, databases, and UI rendering where hierarchical data is common.
Progress0 / 4 steps
1
Create the Binary Tree Nodes
Create a class called Node with an __init__ method that takes data and sets self.data, self.left, and self.right to None. Then create the root node with data = 20, its left child with data = 8, and its right child with data = 22. Also create the left child of the left child with data = 5 and the right child of the left child with data = 3.
DSA Python
Hint

Define the Node class first. Then create the root and its children exactly as described.

2
Add More Nodes and Setup a Queue
Add the right child of the node with data = 3 as a node with data = 10 and the right child of the node with data = 22 as a node with data = 25. Then create a queue called q and add a tuple with the root node and horizontal distance 0 to it.
DSA Python
Hint

Add the new nodes exactly as described. Then create a list q and add the tuple (root, 0) to it.

3
Implement Bottom View Logic
Create an empty dictionary called hd_node to store the bottom-most node data for each horizontal distance. Use a while loop to process the queue q until empty. In each iteration, pop the first element from q into node and hd. Update hd_node[hd] with node.data. If node.left exists, append (node.left, hd - 1) to q. If node.right exists, append (node.right, hd + 1) to q.
DSA Python
Hint

Use a dictionary to store the latest node data for each horizontal distance. Use a queue to traverse level by level, updating the dictionary.

4
Print the Bottom View
Print the values of hd_node sorted by their keys (horizontal distances) from left to right, separated by spaces.
DSA Python
Hint

Sort the keys of hd_node and print the corresponding values separated by spaces.

Practice

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

Solution

  1. Step 1: Understand the bottom view concept

    The bottom view shows nodes visible when looking at the tree from below, meaning the lowest nodes at each horizontal distance.
  2. Step 2: Compare with other views

    Top view shows nodes from above, left and right views show nodes from sides, so bottom view is unique for bottom perspective.
  3. Final Answer:

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

    Bottom view = visible nodes from below [OK]
Hint: Bottom view shows lowest nodes at each horizontal distance [OK]
Common Mistakes:
  • Confusing bottom view with top view
  • Thinking bottom view shows all leaf nodes
  • Mixing bottom view with side views
2. Which data structure is commonly used to track nodes and their horizontal distances when computing the bottom view of a binary tree?
easy
A. Hash Map (Dictionary)
B. Queue
C. Stack
D. Linked List

Solution

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

    We need to map horizontal distances to nodes to know which node is visible at each position.
  2. Step 2: Choose the data structure

    A hash map (dictionary) stores horizontal distance as key and node value as value, updating with the bottom-most node.
  3. Final Answer:

    Hash Map (Dictionary) -> Option A
  4. Quick Check:

    Use dictionary to map horizontal distance to node [OK]
Hint: Use dictionary to map horizontal distance to node [OK]
Common Mistakes:
  • Using stack which is LIFO and not suitable here
  • Using queue alone without mapping distances
  • Using linked list which is inefficient for key-value mapping
3. What is the bottom view output of the following binary tree?
        20
       /  \
     8     22
    / \      \
   5   3      25
      / \     
     10  14
medium
A. [5, 10, 3, 14, 25]
B. [5, 8, 10, 14, 25]
C. [5, 10, 3, 22, 25]
D. [8, 10, 3, 14, 22]

Solution

  1. Step 1: Assign horizontal distances and find bottom nodes

    Horizontal distances: 20(0), 8(-1), 22(1), 5(-2), 3(0), 25(2), 10(-1), 14(1). Bottom nodes at each distance: -2:5, -1:10, 0:3, 1:14, 2:25.
  2. Step 2: List bottom view nodes in order of horizontal distance

    From left to right: 5, 10, 3, 14, 25.
  3. Final Answer:

    [5, 10, 3, 14, 25] -> Option A
  4. Quick Check:

    Bottom view nodes by horizontal distance = [5,10,3,14,25] [OK]
Hint: Track horizontal distances and update bottom nodes [OK]
Common Mistakes:
  • Not updating bottom node when a lower node appears
  • Mixing horizontal distances order
  • Including nodes not visible from bottom
4. Consider this code snippet to compute bottom view of a binary tree:
def bottom_view(root):
    if not root:
        return []
    queue = [(root, 0)]
    hd_node = {}
    while queue:
        node, hd = queue.pop()
        hd_node[hd] = node.val
        if node.left:
            queue.append((node.left, hd - 1))
        if node.right:
            queue.append((node.right, hd + 1))
    return [hd_node[hd] for hd in sorted(hd_node)]
What is the main error in this code?
medium
A. Not checking if root is None
B. Using pop() removes last element, causing wrong traversal order
C. Not updating hd_node dictionary
D. Incorrect horizontal distance calculation

Solution

  1. Step 1: Analyze queue usage and traversal order

    The code uses queue.pop() which removes last element (LIFO), making it behave like a stack, causing depth-first traversal instead of breadth-first.
  2. Step 2: Understand impact on bottom view calculation

    Breadth-first traversal is needed to process nodes level by level to correctly update bottom nodes. Using pop() breaks this order.
  3. Final Answer:

    Using pop() removes last element, causing wrong traversal order -> Option B
  4. Quick Check:

    Use pop(0) or deque.popleft() for BFS [OK]
Hint: Use pop(0) for queue to maintain BFS order [OK]
Common Mistakes:
  • Using pop() instead of pop(0) for queue
  • Ignoring empty root check
  • Incorrect horizontal distance updates
5. You have a binary tree where multiple nodes share the same horizontal distance and depth. How should you modify the bottom view algorithm to always show the node with the greatest depth at each horizontal distance?
hard
A. Store nodes in a list for each horizontal distance and pick the smallest value
B. Store only the first node encountered at each horizontal distance
C. Store both node value and depth in the dictionary, update only if new node depth is greater
D. Ignore depth and update dictionary with last visited node

Solution

  1. Step 1: Understand the need to track depth

    To show the bottom-most node at each horizontal distance, we must know which node is deepest (greatest depth).
  2. Step 2: Modify dictionary to store value and depth

    Store a tuple (node value, depth) for each horizontal distance. Update only if new node's depth is greater than stored depth.
  3. Final Answer:

    Store both node value and depth in the dictionary, update only if new node depth is greater -> Option C
  4. Quick Check:

    Track depth to update bottom view nodes correctly [OK]
Hint: Track depth with node to update bottom view correctly [OK]
Common Mistakes:
  • Ignoring depth and overwriting nodes incorrectly
  • Storing all nodes without filtering by depth
  • Picking first or last node without depth check
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