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

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

1.题目

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

2.示例

示例 1:
请添加图片描述

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

示例 2:
请添加图片描述

输入: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++
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值