Bottom View using Inorder

 avatar
unknown
java
10 days ago
1.5 kB
2
Indexable
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