Info Just remove the check from Top View’s answer to ensure we consider the bottommost node at each horizontal level. import java.util.*; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } class Solution { // Pair class to store node and its horizontal distance class Pair { TreeNode node; int horizontalDistance; Pair(TreeNode node, int horizontalDistance) { this.node = node; this.horizontalDistance = horizontalDistance; } } public List<Integer> bottomView(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) return result; // Use TreeMap to store horizontal distance as key and node value as value // TreeMap maintains keys in sorted order, helping in getting bottom view nodes from left to right Map<Integer, Integer> mapHorizontalDistance = new TreeMap<>(); // Use queue for level-order traversal Queue<Pair> queue = new LinkedList<>(); queue.offer(new Pair(root, 0)); while (!queue.isEmpty()) { Pair current = queue.poll(); TreeNode node = current.node; int horizontalDistance = current.horizontalDistance; // Update the map with the latest node value encountered at each horizontal distance // This ensures we consider the bottommost node at each horizontal distance mapHorizontalDistance.put(horizontalDistance, node.val); // Add left child to queue with horizontal distance decreased by 1 if (node.left != null) { queue.offer(new Pair(node.left, horizontalDistance - 1)); } // Add right child to queue with horizontal distance increased by 1 if (node.right != null) { queue.offer(new Pair(node.right, horizontalDistance + 1)); } } // Add bottom view node values from map to result list for (int value : mapHorizontalDistance.values()) { result.add(value); } return result; } }