Construct Binary Search Tree from Preorder Traversal

MediumArrayStackTreeBinary Search TreeMonotonic StackBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function bstFromPreorder(preorder: number[]): TreeNode | null {
  const stack = preorder.reverse();
 
  function build(bound: number): TreeNode | null {
    if (stack.length === 0 || bound < stack[stack.length - 1]) {
      return null;
    }
    const node = new TreeNode(stack.pop()!);
    node.left = build(node.val);
    node.right = build(bound);
    return node;
  }
 
  return build(Number.MAX_SAFE_INTEGER);
}