1305. 两棵二叉搜索树中的所有元素

89 阅读1分钟

1305. 两棵二叉搜索树中的所有元素

  • 两个二叉搜索树都采用中序遍历,就可以把他们都转换为有序数组

  • 将两个有序数组合并为一个有序数组

  • 使用while循环,如果这两个数组至少有一个数组存在值,则会将值取出,然后进一步判断 1.nums1.length && nums2.length有意义,则都取出一个元素做比对,谁小就出列它插入res中

    2.nums1有意义 则直接从nums1取出一项,插入res

    3nums2有意义 则直接从nums2取出一项,插入res

const getAllElements = (root1, root2) => {
  const nums1 = getNums(root1);
  const nums2 = getNums(root2);

  const res = [];

  while (nums1.length || nums2.length) {
    if (nums1.length && nums2.length) {
      res.push(nums1[0] < nums2[0] ? nums1.shift() : nums2.shift());
    } else if (nums1.length) {
      res.push(nums1.shift());
    } else {
      res.push(nums2.shift());
    }
  }

  return res;
};

// 中序遍历
const getNums = root => {
  const res = [];

  const inOrder = root => {
    if (!root) return;
    inOrder(root.left);
    res.push(root.val);
    inOrder(root.right);
  };

  inOrder(root);
  return res;
};