从k个不同的树中打印排序的数字,而不知道哪个

时间:2016-07-16 16:42:43

标签: algorithm data-structures binary-search-tree

给定k二分查找树T_1 ,..., T_k,总共n个不同的数字。

对于每个1 <= i <= k-2T_i < T_{i+2}(所有T_i个数字都小于T_{i+2}个数字)。

如何打印排序的n个数字?

时间:O(n + k*log(k))

您不知道树的索引,这意味着Sort(k Trees)不一定会将第一棵树变为T_1,依此类推......

1 个答案:

答案 0 :(得分:0)

如果树已经排序,即满足属性

,则可以O(n)复杂度解决此任务
  

对于每个1 <= i <= k-2T_i < T_{i+2} [1]

首先,为了简化此任务,我们可以使用排序数组的数组而不是二进制搜索树数组。输出的复杂性排序数组和BST中的所有元素具有相同的复杂度O(t),其中t此数组/树中的元素数。在这个解决方案中,我们不需要在BST上查找操作或平衡操作。

如果取代属性 [1] ,我们拥有属性&#34;对于每个1 <= i <= k-1T_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的解决方案绝对类似于数组。