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++ } } }