JSFiddle - React, Tailwind, and code Playground

by Prathameshsb

JavaScript

class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}


function printVerticalOrder(root) {
  if (!root) return [];

  const columns = new Map(); // Map to store columns

  const queue = [{ node: root, col: 0 }]; // Initialize queue with root

  while (queue.length) {
    const { node, col } = queue.shift();

    if (!columns.has(col)) {
      columns.set(col, []);
    }

    columns.get(col).push(node.val); // Push node value to respective column

    if (node.left) {
      queue.push({ node: node.left, col: col - 1 }); // Decrement column index for left child
    }

    if (node.right) {
      queue.push({ node: node.right, col: col + 1 }); // Increment column index for right child
    }
  }

  // Sort the columns by their index
  const sortedColumns = [...columns.entries()].sort((a, b) => a[0] - b[0]);

  // Extract values from sorted columns
  const result = sortedColumns.map(([, values]) => values);

  return result;
}

const tree = new TreeNode(
  6,
  new TreeNode(
    3,
    new TreeNode(5, null, new TreeNode(2, new TreeNode(9), new TreeNode(7))),
  ),
  new TreeNode(
    4,
    new TreeNode(1),
    new TreeNode(
      0,
      new TreeNode(8),
    ),
  ),
);



const result = printVerticalOrder(tree);
console.log(result);