Además de todos los otros buenos comentarios:
Las tablas hash en general tienen un mejor comportamiento de caché y requieren menos lecturas de memoria en comparación con un árbol binario. Para una tabla hash, normalmente solo se realiza una lectura antes de tener acceso a una referencia que contiene sus datos. El árbol binario, si es una variante balanceada, requiere algo del orden de k * lg (n) lecturas de memoria para alguna constante k.
Por otro lado, si un enemigo conoce su función hash, el enemigo puede hacer cumplir su tabla hash para hacer colisiones, lo que obstaculiza enormemente su rendimiento. La solución es elegir la función hash al azar de una familia, pero un BST no tiene esta desventaja. Además, cuando la presión de la tabla hash aumenta demasiado, a menudo tiende a agrandar y reasignar la tabla hash, lo que puede ser una operación costosa. El BST tiene un comportamiento más simple aquí y no tiende a asignar repentinamente una gran cantidad de datos y hacer una operación de refrito.
Los árboles tienden a ser la estructura de datos promedio final. Pueden actuar como listas, se pueden dividir fácilmente para operaciones en paralelo, se pueden eliminar, insertar y buscar rápidamente en el orden de O (lg n) . No hacen nada particularmente bien, pero tampoco tienen un comportamiento excesivamente malo.
Finalmente, los BST son mucho más fáciles de implementar en lenguajes funcionales (puros) en comparación con las tablas hash y no requieren la implementación de actualizaciones destructivas (el argumento de persistencia de Pascal anterior).