Я лично считаю , что лучший способ сделать это было бы пойти на рандомизированного двоичного дерева поиска , как декартово дерево . Это не абсолютно гарантировать , что дерево будет сбалансированным, но с высокой вероятностью дерево будет иметь хороший коэффициент баланса. Декартово дерево работает, дополняя каждый элемент дерева с равномерно случайным числом, то гарантируя , что дерево является бинарным деревом поиска по клавишам и кучи относительно однородных случайных величин. Вставка в декартово дерево очень легко:
- Выберите случайное число, чтобы назначить вновь добавленный элемент.
- Вставьте элемент в BST, используя стандартную вставку BST.
- В то время как ключ нового вставленный элемента больше, чем ключ его родитель, выполнить поворот дерева, чтобы принести новый элемент выше своего родителя.
Это последний шаг является единственным действительно трудно один, но если у вас некоторое время, чтобы работать его на доске, я уверен, что вы могли бы реализовать это на лету в интервью.
Другой вариант , который может работать будет использовать расставленными дерево . Это еще один тип быстрого BST , которые могут быть реализованы при условии , у вас есть стандартная функция BST вставки и способность сделать дерево вращения. Важно отметить, что распущенные деревья очень быстро на практике, и это известно , что они (с точностью до постоянного множителя) , по крайней мере так же хорошо , как и любой другой статический бинарного дерева поиска.
В зависимости от того, что подразумевается под «дерево поиска» , вы также могли бы рассмотреть возможность хранить целые числа в некоторой структуре , оптимизированной для поиска целых чисел. Например, вы могли бы использовать побитовое синтаксическое дерево для хранения целых чисел, который поддерживает поиск по времени , пропорционального количеству бит в машинном слове. Это может быть реализовано достаточно хорошо , используя рекурсивную функцию , чтобы просмотреть биты, и не требует какого - либо вращений. Если вам нужно взрываться реализацию через пятнадцать минут, а если интервьюер позволяет отклоняться от стандартных бинарных деревьев поиска, то это может быть отличным решением.
Надеюсь это поможет!