В дополнение ко всем другим хорошим комментариям:
Хеш-таблицы в целом лучше работают с кешем, требуя меньше операций чтения из памяти по сравнению с двоичным деревом Для хэш-таблицы обычно требуется только одно чтение, прежде чем вы получите доступ к ссылке, содержащей ваши данные. Бинарное дерево, если оно является сбалансированным вариантом, требует чего-то порядка k * lg (n) чтения памяти для некоторой константы k.
С другой стороны, если враг знает вашу хэш-функцию, он может заставить ваш хеш-таблицу создавать коллизии, что значительно снижает его производительность. Обходной путь заключается в случайном выборе хеш-функции из семейства, но BST не имеет этого недостатка. Кроме того, когда давление в хеш-таблице растет слишком сильно, вы часто стремитесь увеличить и перераспределить хеш-таблицу, что может быть дорогостоящей операцией. BST имеет более простое поведение и не склонен внезапно выделять много данных и выполнять операцию перефразировки.
Деревья имеют тенденцию быть конечной средней структурой данных. Они могут действовать как списки, могут легко разделяться для параллельной работы, иметь быстрое удаление, вставку и поиск порядка O (lg n) . Они ничего не делают особенно хорошо, но они также не ведут себя слишком плохо.
Наконец, BST намного проще реализовать на (чистых) функциональных языках по сравнению с хеш-таблицами, и для них не требуется реализовывать деструктивные обновления (аргумент persistence от Pascal выше).