Ce que vous demandez est possible compte tenu de vos contraintes.
Une analyse
La force d'une table de hachage est sa vitesse de recherche et d'insertion rapide. Pour obtenir cette vitesse, il faut renoncer à tout semblant d'ordre dans le tableau: les entrées sont toutes mélangées. Une liste est acceptable à utiliser comme entrée de table car bien que la traversée soit O (n), les listes ont tendance à être courtes en supposant que la table de hachage est suffisamment grande et que les objets stockés dans la table sont hachés à l'aide d'un algorithme de hachage de bonne qualité.
Un arbre de recherche binaire (BST) a une insertion et une recherche rapides sur O (log 2 n). Il impose également une restriction sur les éléments qu'il stocke: il doit y avoir un moyen de classer les éléments. Étant donné deux éléments A et B stockés dans l'arborescence, il doit être possible de déterminer si A précède B ou s'ils ont un ordre équivalent.
Une table de hachage n'impose aucune restriction de ce type: les éléments d'une table de hachage doivent avoir deux propriétés. Premièrement, il doit y avoir un moyen de déterminer si elles sont équivalentes; deuxièmement, il doit exister un moyen de calculer un code de hachage déterministe. La commande n'est pas une exigence.
Si vos éléments de table de hachage ont une commande, vous pouvez utiliser un BST comme entrée de table de hachage pour contenir des objets avec le même code de hachage (collisions). Cependant, en raison d'un BST ayant une recherche et une insertion O (log 2 n), cela signifie que le pire des cas pour la structure entière (table de hachage plus BST) est techniquement meilleur que d'utiliser une liste comme entrée de table. Selon l'implémentation de BST, il faudra plus de stockage qu'une liste, mais probablement pas beaucoup plus.
Veuillez noter que normalement le surcoût et le comportement d'un BST n'apportent rien à la table dans des situations du monde réel comme des compartiments de table de hachage, c'est pourquoi les mauvaises performances théoriques d'une liste sont acceptables. En d'autres termes, la table de hachage compense la faiblesse de la liste en plaçant moins d'éléments dans chaque liste (compartiment). Cependant : le problème indiquait spécifiquement que la table de hachage ne peut pas augmenter en taille, et les collisions sont plus fréquentes que ce qui est typique dans une table de hachage.
la mise en oeuvre
Je ne vais pas mettre de code ici car honnêtement ce n'est pas vraiment nécessaire et vous n'avez pas donné de langue de toute façon.
Ce que je ferais, c'est simplement copier la table de hachage standard que contient la bibliothèque standard de votre langue dans une nouvelle classe, puis changer le type de compartiment de table d'une liste à un arbre. Selon la langue et sa bibliothèque standard, cela peut être une chose très triviale à faire.
Normalement, je ne recommanderais pas le copier-coller du codage comme celui-ci. Cependant, c'est un moyen facile d'obtenir une structure de données testée au combat très rapidement.