📖 Scenario: Imagine you have a tree of family members shown as a binary tree. You want to see which members are visible if you look at the tree from the bottom.
🎯 Goal: Build a program that finds the bottom view of a binary tree. The bottom view shows the nodes visible when the tree is seen from the bottom.
📋 What You'll Learn
Create a binary tree with given nodes and structure
Use a map to track horizontal distances of nodes
Traverse the tree to find the bottom view nodes
Print the bottom view nodes from left to right
💡 Why This Matters
🌍 Real World
Bottom view of a binary tree helps in visualizing hierarchical data from a different perspective, useful in network routing and geographical mapping.
💼 Career
Understanding tree traversals and views is important for software engineers working with data structures, algorithms, and system design.
Progress0 / 4 steps
1
Create the Binary Tree Structure
Define a struct called Node with an int data, and two pointers left and right. Then create the root node with value 20, its left child with value 8, and right child with value 22.
DSA C++
Hint
Start by defining the node structure and then create the root and its two children exactly as described.
2
Add More Nodes to the Tree
Add the left child of node 8 with value 5 and the right child of node 8 with value 3. Also add the left child of node 22 with value 4 and the right child of node 22 with value 25.
DSA C++
Hint
Attach the new nodes exactly as children of the specified nodes.
3
Implement Bottom View Logic
Write a function void bottomView(Node* root) that uses a map<int, int> to store the bottom view nodes. Use a queue of pairs queue<pair<Node*, int>> to do a level order traversal. For each node, update the map with the node's data at its horizontal distance. Traverse the tree starting with horizontal distance 0 for root.
DSA C++
Hint
Use a queue to do level order traversal and a map to keep the latest node at each horizontal distance.
4
Print the Bottom View
Call the function bottomView(root) and print the bottom view nodes of the tree.
DSA C++
Hint
Call the bottomView function with the root node and print the result.
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 bottom
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 right side
Solution
Step 1: Understand the bottom view concept
The bottom view shows nodes visible when looking from the bottom of the tree, meaning the lowest nodes at each horizontal distance.
Step 2: Compare with other views
Top view shows nodes visible from above, left and right views show nodes from sides, so bottom view is unique for bottom visibility.
Final Answer:
Nodes visible when the tree is viewed from the bottom -> Option A
Quick Check:
Bottom view = nodes visible from bottom [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 of the following C++ STL containers is most suitable to store nodes by their horizontal distance for bottom view calculation?
easy
A. std::vector<int>
B. std::map
C. std::stack<int>
D. std::queue<int>
Solution
Step 1: Identify data structure needs
We need to map horizontal distances (int) to node values (int) and keep them sorted by horizontal distance.
Step 2: Choose container
std::map keeps keys sorted and allows key-value pairs, perfect for horizontal distance mapping.
Final Answer:
std::map -> Option B
Quick Check:
Use map for sorted key-value pairs [OK]
Hint: Use map to keep horizontal distances sorted [OK]
Common Mistakes:
Using vector which is index-based, not key-based
Using stack or queue which don't map keys to values
Not sorting horizontal distances
3. What is the bottom view output of the following binary tree?
20
/ \
8 22
/ \ \
5 3 25
/ \
10 14
medium
A. [5, 8, 10, 14, 25]
B. [5, 10, 14, 22, 25]
C. [5, 10, 3, 14, 25]
D. [8, 10, 3, 14, 22]
Solution
Step 1: Assign horizontal distances (HD) to nodes
Root 20 at HD=0; 8 at HD=-1; 22 at HD=1; 5 at HD=-2; 3 at HD=0; 25 at HD=2; 10 at HD=-1; 14 at HD=1.
Step 2: Determine bottom view nodes by HD
At HD=-2: 5; HD=-1: 10 (lower than 8); HD=0: 3 (lower than 20); HD=1: 14 (lower than 22); HD=2: 25.
Final Answer:
[5, 10, 3, 14, 25] -> Option C
Quick Check:
Bottom view nodes by HD = [5,10,3,14,25] [OK]
Hint: Track horizontal distances and pick lowest nodes [OK]
Common Mistakes:
Choosing top nodes instead of bottom nodes
Mixing horizontal distances incorrectly
Ignoring nodes at same horizontal distance but lower level
4. Consider this code snippet for bottom view calculation. What is the error?
void bottomView(Node* root) {
if (!root) return;
std::map hdNodeMap;
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 (hdNodeMap.find(hd) == hdNodeMap.end()) {
hdNodeMap[hd] = node->data;
}
if (node->left) q.push({node->left, hd - 1});
if (node->right) q.push({node->right, hd + 1});
}
for (auto it : hdNodeMap) {
std::cout << it.second << " ";
}
}
medium
A. It stores only the first node at each horizontal distance, not the bottom-most
B. It uses queue incorrectly for BFS traversal
C. It does not check for null root
D. It prints nodes in reverse horizontal order
Solution
Step 1: Analyze node storage logic
The code stores node data only if horizontal distance is not already in map, so it keeps first node encountered at that HD.
Step 2: Understand bottom view requirement
Bottom view requires the lowest node at each HD, so we must update map with nodes at lower levels, not just first.
Final Answer:
It stores only the first node at each horizontal distance, not the bottom-most -> Option A
Quick Check:
Bottom view needs last node at HD, not first [OK]
Hint: Update map with latest node at each horizontal distance [OK]
Common Mistakes:
Not updating map for lower level nodes
Assuming BFS order guarantees bottom view
Ignoring horizontal distance updates
5. Given a binary tree, how would you modify the bottom view algorithm to handle nodes with the same horizontal distance and depth, ensuring the rightmost node is chosen in the bottom view?
hard
A. Use a queue for BFS and update map only if node depth is greater, replacing existing node
B. Use DFS and store only the first node encountered at each horizontal distance
C. Use a stack and update map only if node depth is less than current stored depth
D. Use BFS and update map only if node depth is greater or equal, replacing existing node
Solution
Step 1: Understand the problem with same HD and depth
When nodes share horizontal distance and depth, bottom view should show the rightmost node.
Step 2: Modify BFS approach
Use BFS to traverse level by level, and update map if current node's depth is greater or equal to stored node's depth, ensuring rightmost node replaces leftmost at same depth.
Step 3: Implement depth tracking
Track depth along with horizontal distance, update map accordingly during BFS.
Final Answer:
Use BFS and update map only if node depth is greater or equal, replacing existing node -> Option D
Quick Check:
Update map on equal or greater depth for rightmost node [OK]
Hint: Update map if depth >= current to keep rightmost node [OK]
Common Mistakes:
Ignoring depth when updating map
Using DFS which doesn't guarantee level order
Not handling equal depth nodes properly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.