All Elements in Two Binary Search Trees

MediumTreeDepth-First SearchBinary Search TreeSortingBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function getAllElements(root1: TreeNode | null, root2: TreeNode | null): number[] {
  function inorder(node: TreeNode | null, arr: number[] = []) {
    if (node === null) {
      return arr;
    }
    inorder(node.left, arr);
    arr.push(node.val);
    inorder(node.right, arr);
    return arr;
  }
 
  function merge(arr1: number[], arr2: number[]) {
    const result: number[] = [];
 
    let [i, j] = [0, 0];
    while (i < arr1.length && j < arr2.length) {
      if (arr1[i] < arr2[j]) {
        result.push(arr1[i]);
        i += 1;
      } else {
        result.push(arr2[j]);
        j += 1;
      }
    }
    return [...result, ...arr1.slice(i), ...arr2.slice(j)];
  }
 
  return merge(inorder(root1), inorder(root2));
}