O que você está pedindo é possível, dadas as suas restrições.
Análise
A força de uma tabela de hash é sua rápida pesquisa e velocidade de inserção. Para obter essa velocidade, é preciso abandonar qualquer aparência de ordem na tabela: ou seja, as entradas são todas desordenadas. Uma lista é aceitável para uso como entrada da tabela porque, embora a travessia seja O (n), as listas tendem a ser curtas, supondo que a tabela de hash seja suficientemente grande e que os objetos armazenados na tabela sejam hash usando um algoritmo de hash de boa qualidade.
Uma árvore de pesquisa binária (BST) tem inserção e pesquisa rápidas em O (log 2 n). Também impõe uma restrição aos elementos que armazena: deve haver alguma maneira de ordenar os elementos. Dados dois elementos A e B armazenados na árvore, deve ser possível determinar se A vem antes de B ou se eles têm ordem equivalente.
Uma tabela de hash não impõe essa restrição: os elementos em uma tabela de hash devem ter duas propriedades. Primeiro, deve haver uma maneira de determinar se são equivalentes; segundo, deve haver uma maneira de calcular um código hash determinístico. A ordem não é um requisito.
Se seus elementos da tabela de hash tiverem um pedido, você poderá usar uma BST como uma entrada da tabela de hash para manter objetos com o mesmo código de hash (colisões). No entanto, devido a uma BST ter pesquisa e inserção de O (log 2 n), isso significa que o pior caso para toda a estrutura (tabela de hash mais BST) é tecnicamente melhor do que usar uma lista como entrada da tabela. Dependendo da implementação do BST, será necessário mais armazenamento do que uma lista, mas provavelmente não muito mais.
Observe que normalmente a sobrecarga e o comportamento de um BST não traz nada para a tabela em situações do mundo real como baldes de tabelas de hash, e é por isso que o baixo desempenho teórico de uma lista é aceitável. Em outras palavras, a tabela de hash compensa a fraqueza da lista, colocando menos itens em cada lista (bloco). No entanto : o problema declarou especificamente que a tabela de hash não pode aumentar de tamanho e as colisões são mais frequentes do que o normal em uma tabela de hash.
Implementação
Não vou colocar código aqui, porque honestamente não é realmente necessário e você não forneceu um idioma de qualquer maneira.
O que eu faria é simplesmente copiar qualquer tabela de hash padrão que a biblioteca padrão de seu idioma contenha em uma nova classe e alterar o tipo de balde de tabela de uma lista para uma árvore. Dependendo do idioma e de sua biblioteca padrão, isso pode ser algo muito trivial.
Normalmente, eu não recomendaria copiar e colar códigos como este. No entanto, é uma maneira fácil de obter uma estrutura de dados testada em batalha muito rapidamente.