题目描述
给你 root1 和 root2 这两棵二叉搜索树。
请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.
示例 1:
输入: root1 = [2,1,4], root2 = [1,0,3]
输出: [0,1,1,2,3,4]
示例 2:
输入: root1 = [0,-10,10], root2 = [5,1,7,0,2]
输出: [-10,0,0,1,2,5,7,10]
示例 3:
输入: root1 = [], root2 = [5,1,7,0,2]
输出: [0,1,2,5,7]
示例 4:
输入: root1 = [0,-10,10], root2 = []
输出: [-10,0,10]
示例 5:
输入: root1 = [1,null,8], root2 = [8,1]
输出: [1,1,8,8]
提示:
- 每棵树最多有
5000个节点。 - 每个节点的值在
[-10^5, 10^5]之间。
归并排序
解题思路
因为二叉搜索树的性质为左子树的节点值都小于根节点值,右子树的节点值都大于根节点值。所以如果对二叉搜索树进行中序遍历,得到的结果数组是一个升序的数组。
之后合并两颗树即可
代码实现
var getAllElements = function(root1, root2) {
let temp = [];
let lnums = [], rnums = [];
getNum(root1,lnums);
getNum(root2,rnums);
// 当前还有元素没有合并进去的时候
var p1= 0, p2 = 0;
while(p1 < lnums.length || p2 < rnums.length){
if((p2 >= rnums.length) || (p1 < lnums.length && lnums[p1] < rnums[p2])){
temp.push(lnums[p1++]);
}else{
temp.push(rnums[p2++])
}
}
return temp;
};
// 实现中序遍历的过程
var getNum = function(root,nums){
if(root == null) return;
getNum(root.left,nums);
nums.push(root.val);
getNum(root.right,nums);
return;
}
至此我们就完成了 leetcode-1305-两棵二叉搜索树中的所有元素