Vertical Order Traversal of a Binary Tree
HardHash TableTreeDepth-First SearchBreadth-First SearchSortingBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
export function verticalTraversal(root: TreeNode | null): number[][] {
const traverseMap = new Map<number, Map<number, number[]>>();
function addNode(value: number, col: number, row: number) {
const cols = traverseMap.get(col);
if (!cols) {
traverseMap.set(col, new Map<number, number[]>([[row, [value]]]));
} else {
const rows = cols.get(row);
if (!rows) {
cols.set(row, [value]);
} else {
const sortedRows = [...rows, value].sort((a, b) => a - b);
cols.set(row, sortedRows);
}
}
}
function traverse(node: TreeNode | null, col: number, row: number) {
if (node) {
addNode(node.val, col, row);
traverse(node.left, col - 1, row + 1);
traverse(node.right, col + 1, row + 1);
}
}
traverse(root, 0, 0);
const sortedCols = Array.from(traverseMap.entries()).sort(([a], [b]) => a - b);
return sortedCols.map(([, rows]) => {
const sortedRows = Array.from(rows.entries()).sort(([a], [b]) => a - b);
return sortedRows.flatMap(([, row]) => row);
});
}