function verticalOrder(root):
if not root:
return []
colMap = defaultdict(list)
queue = deque([(root, 0)])
while queue:
node, col = queue.popleft()
colMap[col].append(node.val)
if node.left:
queue.append((node.left, col - 1))
if node.right:
queue.append((node.right, col + 1))
return [colMap[c] for c in sorted(colMap.keys())]
time due to sorting column keys. space for the map and queue.