Мое требование — иметь возможность быстро получить минимальное и максимальное значение в дереве. (Обратите внимание, не ключ минимума / максимума, а мин / макс спутниковых данных).
Дерево будет основано на строках в качестве ключей, и каждый узел будет хранить с ним целое число. Это целое число обязательно должно меняться и постоянно обновляться. Ключи остаются фиксированными
Я подумывал об использовании подхода, описанного Вот увеличения красного черного дерева, так что каждый узел хранит максимум (максимум левого максимума и правого максимума и себя), аналогичный минимуму.
Поэтому, когда я обновляю узел, я просто обновляю мин / макс каждого узла, который был пройден, чтобы достичь моего текущего узла.
Что было бы лучшим подходом, чтобы избежать переписывания реализации STL красного / черного дерева.
Вы не можете использовать контейнер STL (например, set
(что технически даже не требует от меня BST, насколько я знаю), так как он не предоставляет вам доступ к базовой структуре.
Ваши варианты:
Как вы уже упоминали, пишите свой собственный BST.
Просто используйте вторичный BST (или кучу), который упорядочен по вашему целочисленному значению.
Использование Boost’s multi_index_container
.
Других решений пока нет …