从二进制搜索树中找到第n个最小元素

时间:2015-06-09 06:41:05

标签: data-structures

如何从二进制搜索树中找到第n个最小元素

约束是:

  1. 时间复杂度必须为O(1)
  2. 不应使用额外空间
  3. 我已经尝试了两种方法。

    1. 执行inorder遍历并查找第n个元素 - 时间复杂度O(n)
    2. 维持不。比当前节点小的元素和具有m个小元素的查找元素 - 时间复杂度O(log n)

1 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是更改​​将BST保存在内存中的数据结构。如果您实际上将每个节点视为结构本身(value,left_child和right_child)而不是将它们存储在无序数组中,则应该很简单,您可以将它们存储在有序数组中。因此,第n个最小元素将是数组中的第n个元素。额外的计算将是插入和删除。但是如果你使用例如C ++集(插入和删除的log(n)),它仍然会更有效。

主要取决于您的使用情况。

如果你不使用数据结构处理树(基于数组位置),我认为你不能用比log(n)更好的东西来做。