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

简介: 每日一题——两棵二叉搜索树中的所有元素

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

题目描述:

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

思路:

对俩树进行中序遍历,遍历后得到的是俩有序的数组,再对这俩数组根据大小,合并到一个新的数组,即可。

题解:

func getAllElements(root1 *TreeNode, root2 *TreeNode) []int {
  ans := make([]int, 0)
  ldrRes1 := make([]int, 0)
  ldrRes2 := make([]int, 0)
  ldr(root1, &ldrRes1)
  ldr(root2, &ldrRes2)
  ans = sortNums(ldrRes1,ldrRes2)
  //ans = append(append(ans,ldrRes1...),ldrRes2...)
  //sort.Ints(ans)
  return ans
}
// 中序遍历
func ldr(root *TreeNode, ldrRes *[]int) {
  if root == nil {
    return
  } else {
    ldr(root.Left, ldrRes)
    *ldrRes = append(*ldrRes, root.Val)
    ldr(root.Right, ldrRes)
  }
}
func sortNums(nums1, nums2 []int) []int {
  // num1,和num2 是中序遍历,对于二叉搜索树,中序遍历就是升序
  ans := make([]int, 0)
  m, n := len(nums1), len(nums2)
  // 俩指针
  i, j := 0, 0
  for {
    // 有一个走完,就跳出循环
    if i >= m || j >= n {
      break
    }
    if nums1[i] >= nums2[j] {
      ans = append(ans, nums2[j])
      j++
    } else if nums1[i] < nums2[j] {
      ans = append(ans, nums1[i])
      i++
    }
  }
  // 哪个没有走完 ,就把剩下的都追加到ans中即可
  if i != m {
    ans = append(ans, nums1[i:]...)
  }
  if j != n {
    ans = append(ans, nums2[j:]...)
  }
  return ans
}

提交结果:

相关文章
【剑指offer】-平衡二叉树-37/67
【剑指offer】-平衡二叉树-37/67
Leetcode1038. 从二叉搜索树到更大和树(每日一题)
Leetcode1038. 从二叉搜索树到更大和树(每日一题)
【剑指offer】-二叉搜索树的后序遍历序列-23/67
【剑指offer】-二叉搜索树的后序遍历序列-23/67
|
5月前
|
算法
每日一题:LeetCode-103/107.二叉树的(层序/锯齿形层序)遍历
每日一题:LeetCode-103/107.二叉树的(层序/锯齿形层序)遍历
|
11月前
剑指offer 58. 二叉搜索树的第k个结点
剑指offer 58. 二叉搜索树的第k个结点
38 0
|
11月前
剑指offer 60. 平衡二叉树
剑指offer 60. 平衡二叉树
43 0
|
11月前
剑指offer 34. 二叉搜索树的后序遍历序列
剑指offer 34. 二叉搜索树的后序遍历序列
40 0
LeetCode每日一题(15)——两棵二叉搜索树中的所有元素
两棵二叉搜索树中的所有元素 1.题目 2.示例 3.思路 4.代码
LeetCode每日一题(15)——两棵二叉搜索树中的所有元素
|
存储
LeetCode——1305. 两棵二叉搜索树中的所有元素
LeetCode——1305. 两棵二叉搜索树中的所有元素
39 0
LeetCode——1305. 两棵二叉搜索树中的所有元素
LeetCode 1305. 两棵二叉搜索树中的所有元素
给你 root1 和 root2 这两棵二叉搜索树。
45 0