Я ищу способ реализовать итератор на двоичных кучах (максимальных или минимальных).
То есть, используя его функцию nextNode () в i-й раз, можно получить i-й (больший или меньший) элемент в куче.
Обратите внимание, что эта операция выполняется без извлечения корня кучи!
Мои первоначальные мысли были:
- Фактически извлеките i элементов, поместите их в стек, а затем вставьте их обратно в кучу после получения i-го значения. Это занимает O (i * log (n)) для каждого вызова функции.
- Сохраните вспомогательную сортированную структуру данных, которая может позволить искать следующее значение в O (1), однако обновления будут занимать O (n).
Я понимаю, что эти подходы сводят на нет преимущества использования куч, поэтому ищу лучший подход.