Bottom View using Inorder
import java.util.*; // TreeNode definition as before class Tuple { TreeNode node; int vertical; int level; Tuple(TreeNode node, int vertical, int level) { this.node = node; this.vertical = vertical; this.level = level; } } class Solution { public List<Integer> bottomView(TreeNode root) { // TreeMap to store vertical -> node value at the lowest level TreeMap<Integer, Tuple> map = new TreeMap<>(); // Perform inorder traversal starting from the root inorderTraversal(root, 0, 0, map); // Prepare the result from the map: Just extract the node values List<Integer> result = new ArrayList<>(); for (Tuple tuple : map.values()) { result.add(tuple.node.val); } return result; } private void inorderTraversal(TreeNode node, int vertical, int level, TreeMap<Integer, Tuple> map) { if (node == null) { return; } // Traverse left subtree inorderTraversal(node.left, vertical - 1, level + 1, map); // If this vertical level is not yet visited, or if the current level is deeper, update the map if (!map.containsKey(vertical) || map.get(vertical).level <= level) { map.put(vertical, new Tuple(node, vertical, level)); } // Traverse right subtree inorderTraversal(node.right, vertical + 1, level + 1, map); } }
Leave a Comment