[路飞]_leetcode-1305-两棵二叉搜索树中的所有元素

简介: leetcode-1305-两棵二叉搜索树中的所有元素

网络异常,图片无法展示
|


[题目地址][B站地址]


给你 root1root2 这两棵二叉搜索树。


请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.


示例 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] 之间。


sort 排序


解题思路


遍历两棵二叉搜索树,将节点值插入数组。


对节点值数组进行升序排序,返回排序后的结果数组即可。时间复杂度为 O(n log n)


代码实现


var getAllElements = function(root1, root2) {
  // 创建节点值数组
  const arr = [];
  // 中序遍历
  function inorder(node){
    if(node === null) return;
    inorder(node.left);
    // 将每个节点值插入数组
    arr.push(node.val);
    inorder(node.right);
  }
  inorder(root1);
  inorder(root2);
  // 将数组进行升序排序并返回
  return arr.sort((a,b) => a-b)
};
复制代码


归并排序


解题思路


因为二叉搜索树的性质为左子树的节点值都小于根节点值,右子树的节点值都大于根节点值。所以如果对二叉搜索树进行中序遍历,得到的结果数组是一个升序的数组。


我们可以基于这样的一个结果,进行归并排序,这样的排序时间复杂度为 O(n)。所以相对于之前的 sort 排序解题,时间复杂度上会有一个优化。


代码实现


var getAllElements = function(root1, root2) {
  // 创建两个数组,分别保存两棵树的节点值
  const arr1 = [],arr2 = [];
  function inorder(node,arr){
    if(node === null) return;
    inorder(node.left,arr);
    arr.push(node.val);
    inorder(node.right,arr);
  }
  inorder(root1,arr1);
  inorder(root2,arr2);
  // 创建结果数组
  const res = [],
  // 对两个有序数组进行归并排序
  len1 = arr1.length,len2 = arr2.length;
  let i = 0,j = 0;
  while(i<len1 || j<len2){
    if(j===len2 || (i<len1 && (arr1[i]<arr2[j]))){
      res.push(arr1[i]);
      i++
    }else{
      res.push(arr2[j])
      j++
    }
  }
  // 返回排序后的结果
  return res;
};
复制代码


至此我们就完成了 leetcode-1305-两棵二叉搜索树中的所有元素


如有任何问题或建议,欢迎留言讨论!

相关文章
|
23天前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
32 1
|
29天前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
9 1
|
29天前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
15 1
|
29天前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
34 0
|
29天前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
8 0
|
29天前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
11 0
|
29天前
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
8 0
|
29天前
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
9 0
|
29天前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
11 0
|
29天前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
12 0