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

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

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
}

提交结果:

相关文章
LeetCode每日一题(15)——两棵二叉搜索树中的所有元素
两棵二叉搜索树中的所有元素 1.题目 2.示例 3.思路 4.代码
102 0
LeetCode每日一题(15)——两棵二叉搜索树中的所有元素
LeetCode每日一题——1305. 两棵二叉搜索树中的所有元素
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。
83 0
LeetCode每日一题——1305. 两棵二叉搜索树中的所有元素
LeetCode 1305. 两棵二叉搜索树中的所有元素
给你 root1 和 root2 这两棵二叉搜索树。
70 0
|
存储
LeetCode——1305. 两棵二叉搜索树中的所有元素
LeetCode——1305. 两棵二叉搜索树中的所有元素
67 0
LeetCode——1305. 两棵二叉搜索树中的所有元素
|
算法
力扣每日一题:102.二叉树的层序遍历 深度优先与广度优先双解!
力扣每日一题:102.二叉树的层序遍历 深度优先与广度优先双解!
133 0
[剑指offer] 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解题思路 二叉搜索树: 左子树
1040 0
剑指offer 34. 二叉搜索树的后序遍历序列
剑指offer 34. 二叉搜索树的后序遍历序列
70 0
【剑指offer】-二叉搜索树的后序遍历序列-23/67
【剑指offer】-二叉搜索树的后序遍历序列-23/67

热门文章

最新文章