Bottom View using Inorder
unknown
java
9 months ago
1.5 kB
5
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);
}
}
Editor is loading...
Leave a Comment