Как сохранить минимальное и максимальное время O(1) в сбалансированном бинарном дереве поиска, не возясь с указателями?

Акциз 3-7 в книге «Руководство по разработке алгоритмов». говорит:

Предположим, у вас есть доступ к сбалансированной структуре данных словаря, которая поддерживает каждую из операций поиска, вставки, удаления, минимума, максимума, преемника и предшественника за время O(log n).Объясните, как изменить операции вставки и удаления, чтобы они по-прежнему занимали O(log n), но теперь минимум и максимум занимали время O(1). (Подсказка: подумайте об использовании абстрактных операций со словарем вместо того, чтобы возиться с указателями и тому подобным .)

Без подсказок я думаю, что этот вопрос довольно прост.

Вот мое решение:

для дерева я просто поддерживаю указатель min всегда указывающий на минимум, а другой указатель max всегда указывающий на максимум.

При вставке x я просто сравниваю min.key с x.key, если min.key > x.key, то min = x; и также делаю это для max, если необходимо.

При удалении x, если min==x, то min = преемник(x); если max==x, то max = предшественница(x);

Но подсказка говорит, что я не могу возиться с указателями и тому подобным. Разве мое решение не связано с указателями?

Если мы не можем использовать дополнительные баллы, как я могу получить O(1) для минимума и максимума?

Спасибо

6
задан svick 7 March 2012 в 14:03
поделиться