如何从二进制搜索树中找到第n个最小元素
约束是:
O(1)
我已经尝试了两种方法。
O(n)
O(log n)
答案 0 :(得分:0)
我能想到的唯一方法是更改将BST保存在内存中的数据结构。如果您实际上将每个节点视为结构本身(value,left_child和right_child)而不是将它们存储在无序数组中,则应该很简单,您可以将它们存储在有序数组中。因此,第n个最小元素将是数组中的第n个元素。额外的计算将是插入和删除。但是如果你使用例如C ++集(插入和删除的log(n)),它仍然会更有效。
主要取决于您的使用情况。
如果你不使用数据结构处理树(基于数组位置),我认为你不能用比log(n)更好的东西来做。