2
* Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode3
* right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left,4
* TreeNode right) { this.val = val; this.left = left; this.right = right; } }8
private static class MNode {13
MNode(TreeNode node, int hd, int l) {20
public List<List<Integer>> verticalTraversal(TreeNode root) {21
Map<Integer, PriorityQueue<MNode>> map = new TreeMap<>();22
Queue<MNode> q = new LinkedList<>();24
q.add(new MNode(root, 0, 0));26
while (!q.isEmpty()) {28
MNode curr = q.poll();29
if (map.containsKey(curr.hDist)) map.get(curr.hDist).add(curr);31
PriorityQueue<MNode> pq =33
(a, b) -> (a.level == b.level) ? a.Node.val - b.Node.val : a.level - b.level);35
map.put(curr.hDist, pq);38
if (curr.Node.left != null) q.add(new MNode(curr.Node.left, curr.hDist - 1, curr.level + 1));40
if (curr.Node.right != null)41
q.add(new MNode(curr.Node.right, curr.hDist + 1, curr.level + 1));44
List<List<Integer>> ans = new ArrayList<>();45
for (Integer key : map.keySet()) {46
List<Integer> temp = new ArrayList<>();47
while (!map.get(key).isEmpty()) {48
temp.add(map.get(key).poll().Node.val);50
ans.add(new ArrayList<>(temp));