Об этом BST следует отметить, что ранг начинается с 0.
Более простой способ
Для BST, содержащего X
пронумерованных элементов 0
to (X-1)
,
Наименьший элемент Nth
эквивалентен наибольшему элементу (X-N)th
, и наоборот.
Если у вас нет выбора, кроме как изменитьmethod
В этом случае выбор делает что-то вроде бинарного поиска по рангу.Поэтому, если мы настроим его так, чтобы он всегда шел вправо для меньших рангов (и оставил для более высоких рангов), мы сможем вернуть желаемый ответ.
Инвертировать x.right
и x.left
:
private Node select(Node x, int k) {
if (x == null) return null;
int t = size(x.right);
if (t > k) return select(x.right, k);
else if (t < k) return select(x.left, k-t-1);
else return x;
}