LeetCode每日一题(15)——两棵二叉搜索树中的所有元素

简介: 两棵二叉搜索树中的所有元素1.题目2.示例3.思路4.代码

1.题目


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


2.示例


示例 1:


11.png


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

输出:[0,1,1,2,3,4]


示例 2:


13.png


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

输出:[1,1,8,8]


提示:


每棵树的节点数在 [0, 5000] 范围内

-105 <= Node.val <= 105


3.思路


用二叉树,升序选择前序遍历,两个树的话可以分别排序存数组,再比较两个数组的最小值,将最小值依次加入答案数组


4.代码


/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
//将二叉树中序遍历,获得排序好的数组
func inorder(root *TreeNode) (res []int) {
  var dfs func(*TreeNode)
  dfs = func(node *TreeNode) {
    if node == nil {
      return
    }
    dfs(node.Left)
    res = append(res, node.Val)
    dfs(node.Right)
  }
  dfs(root)
  return
}
func getAllElements(root1, root2 *TreeNode) []int {
  //用上面的方法得到两个排序后的数组
  nums1 := inorder(root1)
  nums2 := inorder(root2)
  p1, n1 := 0, len(nums1)
  p2, n2 := 0, len(nums2)
  //遍历两个数组,按顺序合成一个数组
  ans := make([]int, 0, n1+n2)
  for {
    //如果nums1的数据已经全部加入ans数组,则把nums2剩余的数字加入ans
    //数组组合完成,返回答案
    if p1 == n1 {
      return append(ans, nums2[p2:]...)
    }
    if p2 == n2 {
      return append(ans, nums1[p1:]...)
    }
    if nums1[p1] < nums2[p2] {
      ans = append(ans, nums1[p1])
      p1++
    } else {
      ans = append(ans, nums2[p2])
      p2++
    }
  }
}
相关文章
|
3天前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
13天前
|
Python
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
15 4
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
|
13天前
|
Python
【Leetcode刷题Python】96. 不同的二叉搜索树
LeetCode 96题 "不同的二叉搜索树" 的Python解决方案,使用动态规划算法计算由1至n互不相同节点值组成的二叉搜索树的种数。
12 3
【Leetcode刷题Python】96. 不同的二叉搜索树
|
3天前
|
算法
LeetCode第96题不同的二叉搜索树
文章介绍了LeetCode第96题"不同的二叉搜索树"的解法,利用动态规划的思想和递推公式,通过计算以任意节点为根的不同二叉搜索树的数量,解决了该问题。
LeetCode第96题不同的二叉搜索树
|
3天前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
12天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
11 3
|
13天前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
13 3
|
13天前
|
Python
【Leetcode刷题Python】108. 将有序数组转换为二叉搜索树
LeetCode上108号问题"将有序数组转换为二叉搜索树"的Python实现,通过递归选取数组中间值作为根节点,构建高度平衡的二叉搜索树。
14 2
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
23 2
|
3天前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。