Skip to main content

314. Binary Tree Vertical Order Traversal

https://leetcode.com/problems/binary-tree-vertical-order-traversal/

Python

from collections import deque, defaultdict


class Solution:
def verticalOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
mapper = defaultdict(list)
queue = deque([(root, 0)])

while queue:
node, key = queue.popleft()

if node:
mapper[key].append(node.val)
queue.append((node.left, key-1))
queue.append((node.right, key+1))

return [mapper[key] for key in sorted(mapper.keys())]

Javascript

var verticalOrder = function(root) {
const queue = [];
const res = {};
let min = Infinity;

if (root) queue.push([0, root]);
while (queue.length) {
const [idx, node] = queue.shift();

min = Math.min(idx, min);

if (res[idx]) res[idx].push(node.val);
else res[idx] = [node.val];

//console.log(idx, node.val);
if (node.left) queue.push([idx - 1, node.left]);
if (node.right) queue.push([idx + 1, node.right]);
}

const ary = [];
while (res[min] !== undefined) {
ary.push(res[min]);
min++;
}
return ary;
};