Lo que está pidiendo es posible dadas sus limitaciones.
Análisis
La fuerza de una tabla hash es su rápida búsqueda y velocidad de inserción. Para obtener esa velocidad, uno debe abandonar cualquier apariencia de orden en la tabla: es decir, todas las entradas están mezcladas. Una lista es aceptable para usar como entrada de la tabla porque, mientras que el recorrido es O (n), las listas tienden a ser cortas suponiendo que la tabla hash es lo suficientemente grande y los objetos almacenados en la tabla se combinan utilizando un algoritmo de hash de buena calidad.
Un árbol de búsqueda binario (BST) tiene una inserción y búsqueda rápidas en O (log 2 n). También impone una restricción a los elementos que almacena: debe haber alguna forma de ordenar los elementos. Dados dos elementos A y B almacenados en el árbol, debe ser posible determinar si A viene antes que B o si tienen un orden equivalente.
Una tabla hash no impone tal restricción: los elementos en una tabla hash deben tener dos propiedades. Primero, debe haber una manera de determinar si son equivalentes; segundo, debe haber una manera de calcular un código hash determinista. El orden no es un requisito.
Si los elementos de su tabla hash tienen un orden, puede usar un BST como entrada de la tabla hash para contener objetos con el mismo código hash (colisiones). Sin embargo, debido a que BST tiene búsqueda e inserción de O (log 2 n), eso significa que el peor de los casos para toda la estructura (tabla hash más BST) es técnicamente mejor que usar una lista como entrada de tabla. Dependiendo de la implementación de BST, requerirá más almacenamiento que una lista, pero probablemente no mucho más.
Tenga en cuenta que normalmente la sobrecarga y el comportamiento de un BST no aporta nada a la mesa en situaciones del mundo real como cubos de tabla hash, por lo que el pobre rendimiento teórico de una lista es aceptable. En otras palabras, la tabla hash compensa la debilidad de la lista al colocar menos elementos en cada lista (depósito). Sin embargo : el problema indicó específicamente que la tabla hash no puede aumentar de tamaño, y las colisiones son más frecuentes de lo que es típico en una tabla hash.
Implementación
No voy a poner código aquí porque, sinceramente, no es realmente necesario y de todos modos no dio un idioma.
Lo que haría es simplemente copiar cualquier tabla hash estándar que contenga la biblioteca estándar de su idioma en una nueva clase, luego cambiar el tipo de cubo de tabla de una lista a un árbol. Dependiendo del idioma y su biblioteca estándar, esto puede ser algo muy trivial.
Normalmente no recomendaría copiar y pegar codificaciones como esta. Sin embargo, es una manera fácil de obtener una estructura de datos probada en batalla muy rápidamente.