BST — Двоичные деревья поиска

Оценивание: стандартная задача, 20 баллов.

Вот заготовка для реализации класса BST на языке Java (основана на типе BST из курса Седжвика Algorithms, Part I):

Специализированная версия для подсчета количества ключей (при добавлении ключа значение увеличивается на 1).

Реализация всех основных операций над двоичным деревом поиска (в виде псевдокода), приведена здесь.

Дополнительная задача: сравнить производительность полученного двоичного дерева в качестве реализации ассоциативного массива для задачи построения частотного словаря с производительностью TreeMap и HashMap.
Оценивание: стандартная задача, 20 баллов.