如果您有 AVL 树,从中获取中位数的最佳方法是什么?中位数将被定义为排序列表中索引为 ceil(n/2)(索引从 1 开始)的元素。
所以如果列表是
1 3 5 7 8
中位数是 5。如果列表是
1 3 5 7 8 10
中位数为 5。
如果可以扩充树,我认为最好让每个节点都知道子树的大小(节点数),(即1 + left.size + right.size)。使用这个,我能想到的最好的方法是使中位数搜索 O(lg n) 时间,因为您可以通过比较索引来遍历。
有没有更好的办法?