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;
};