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

72 阅读1分钟

记录算法学习,输出更有利于学习!

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

例子 :

例子.png 思路: 由于是 二叉搜索树, 依据特性,可以使用中序遍历,得到一个升序数组,使用ES6 可以直接排序(这边就可以使用其他的遍历,反正到时候要合并排序 )。非 ES6, 循环两个数组 ,定义锚点记录两个数组的状态,然后对比大小。把小的放进去, 当一个数组 放满后,循环未满的数组依次放入即可

完整代码

ES6

var getAllElements = function(root1, root2) {

    let res = []

    function getNodeList (root, arr) {

          if (!root) return arr;

            getNodeList(root.left, arr);

            arr.push(root.val);

            getNodeList(root.right, arr);

            return arr;

    }

   return res.concat(getNodeList(root1, []), getNodeList(root2, [])).sort((a, b) => {
       return a-b

   })

};

非 ES6:

var getAllElements = function(root1, root2) {
    let res = []
    function getNodeList (root, arr) {
          if (!root) return arr;
            getNodeList(root.left, arr);
            arr.push(root.val);
            getNodeList(root.right, arr);
            return arr;

    }
	const nums1 = getNodeList(root1, [])
	const nums2 = getNodeList(root2, [])
	let p1 = 0
	let p2 = 0
	while(true) {
		if(p1 === nums1.length) {
			for(let i = p2; i < nums2.length; i++) {
				res.push(nums2[i])
			}
			// 结束循环
			break
		}
		if (p2 === nums2.length) {
            for (let i = p1; i < nums1.length;i++) {
                res.push(nums1[i]);
            }
            break;
        }
        // 对比大小
         if (nums1[p1] < nums2[p2]) {
            res.push(nums1[p1++]);
        } else {
            res.push(nums2[p2++]);
        }
	
	}
	return res;
};