给定k
二分查找树T_1 ,..., T_k
,总共n
个不同的数字。
对于每个1 <= i <= k-2
:T_i < T_{i+2}
(所有T_i
个数字都小于T_{i+2}
个数字)。
如何打印排序的n
个数字?
时间:O(n + k*log(k))
您不知道树的索引,这意味着Sort(k Trees)
不一定会将第一棵树变为T_1
,依此类推......
答案 0 :(得分:0)
如果树已经排序,即满足属性
,则可以O(n)
复杂度解决此任务
对于每个
1 <= i <= k-2
:T_i < T_{i+2}
[1]
首先,为了简化此任务,我们可以使用排序数组的数组而不是二进制搜索树数组。输出的复杂性排序数组和BST中的所有元素具有相同的复杂度O(t)
,其中t
此数组/树中的元素数。在这个解决方案中,我们不需要在BST上查找操作或平衡操作。
如果取代属性 [1] ,我们拥有属性&#34;对于每个1 <= i <= k-1
:T_i < T_{i+1}
&#34; ?我们可以输出第一个数组中的所有元素,然后输出第二个数组中的元素,依此类推复杂性将是O(n)。
当我们输出i
中的元素时,我们需要考虑下一个i+1
- 数组并在{{1}中输出一些元素} -th数组也是。即我们在第i+1
次迭代时输出i
- 和i+1
- 数组中的元素。我们只在i
- 数组中没有元素时才在i
- 和i+1
- 数组中完成输出元素,但i
中可以是(应该是)元素第 - 个数组。因此,我们需要在i+1
- 数组(让它为x)和迭代i+1
中保存位置,而不是从i+1
- 数组开始,而是从位置i+1
开始(并从数组x
开始 - 从第一个位置开始)。
BST的解决方案绝对类似于数组。