[路飞]_leetcode_1305. 两棵二叉搜索树中的所有元素

92 阅读1分钟

给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.

示例 1:

    2         1
   / \       / \
  1   4     0   3
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]

示例 2:


输入:root1 = [1,null,8], root2 = [8,1]
输出:[1,1,8,8]

解题思路

这一题我们可以把每棵树遍历放到数组中,然后将数组合并排序。因为题目提供的是二叉搜索树,我们可以通过中序遍历得到一个递增的数列。

代码

var getArr = function(arr, root) {
    if (!root) return
    getArr(arr, root.left)
    arr.push(root.val)
    getArr(arr, root.right)
}
var getAllElements = function(root1, root2) {
    let arr1 = [], arr2 = []
    getArr(arr1, root1)
    getArr(arr2, root2)

    let ans = []
    let p1 = 0
    for(let i = 0; i < arr2.length; i++) {
        while(p1 < arr1.length && arr1[p1] <= arr2[i]) {
            ans.push(arr1[p1++])
        }
        ans.push(arr2[i])
    }

    if (p1 < arr1.length) {
        for (let i = p1; i < arr1.length; i++) {
            ans.push(arr1[i])
        }
    }
    return ans
};