class Solution {
public static List<List<Integer>> verticalOrder(TreeNode root) {
ArrayList<List<Integer>> output = new ArrayList<List<Integer>>();;
if(root==null) {
return output;
}
Queue<Map.Entry<TreeNode, Integer>> queue = new ArrayDeque<>();
queue.offer(new AbstractMap.SimpleEntry(root,0));
HashMap<Integer, List<Integer>> columnMap = new HashMap<Integer, List<Integer>>();
int minColumn = 0;
int maxColumn =0;
while(!queue.isEmpty()) {
Map.Entry<TreeNode, Integer> queueMap = queue.poll();
TreeNode node = queueMap.getKey();
Integer column = queueMap.getValue();
if(!columnMap.containsKey(column)) {
columnMap.put(column, new ArrayList<Integer>());
}
columnMap.get(column).add(node.val);
minColumn = Math.min(minColumn, column);
maxColumn = Math.max(maxColumn, column);
if(node.left!=null) queue.offer(new AbstractMap.SimpleEntry(node.left,column-1));
if(node.right!=null) queue.offer(new AbstractMap.SimpleEntry(node.right,column+1));
}
for(int i=minColumn;i<maxColumn+1;i++) {
output.add(columnMap.get(i));
}
return output;
}
}
Type your question above this line.
Course: https://www.educative.io/collection/10370001/4938268330688512
Lesson: https://www.educative.io/collection/page/10370001/4938268330688512/4798509859995648