Inorder for Vertical Order Traversal
unknown
java
9 months ago
1.9 kB
4
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<List<Integer>> verticalTraversal(TreeNode root) {
// TreeMap stores the nodes by vertical -> level -> node value
TreeMap<Integer, TreeMap<Integer, PriorityQueue<Integer>>> map = new TreeMap<>();
// Start the inorder traversal
inorder(root, 0, 0, map);
// Prepare the result list by traversing the map
List<List<Integer>> result = new ArrayList<>();
for (TreeMap<Integer, PriorityQueue<Integer>> verticalMap : map.values()) {
List<Integer> verticalNodes = new ArrayList<>();
for (PriorityQueue<Integer> nodeQueue : verticalMap.values()) {
while (!nodeQueue.isEmpty()) {
verticalNodes.add(nodeQueue.poll());
}
}
result.add(verticalNodes);
}
return result;
}
// Inorder traversal method
private void inorder(TreeNode node, int vertical, int level, TreeMap<Integer, TreeMap<Integer, PriorityQueue<Integer>>> map) {
if (node == null) {
return;
}
// Traverse left
inorder(node.left, vertical - 1, level + 1, map);
// Visit the current node
if (!map.containsKey(vertical)) {
map.put(vertical, new TreeMap<>());
}
if (!map.get(vertical).containsKey(level)) {
map.get(vertical).put(level, new PriorityQueue<>());
}
map.get(vertical).get(level).add(node.val);
// Traverse right
inorder(node.right, vertical + 1, level + 1, map);
}
}
Editor is loading...
Leave a Comment