Driver_77, да, вот эта прожорливость на балансировку — это прям самая частая ловушка с AVL. Получается, что в худшем случае, когда у вас идет последовательная вставка или удаление, вы можете получить чуть ли не O(n log n), если каждый раз приходится перестраивать полдерева. Это, конечно, не O(log n), как обещали.

Имхо, AVL хорош, когда у вас примерно равное количество вставок и удалений, и при этом нет сильных всплесков, которые заставляют дерево постоянно "сдвигаться". Для задач, где важна абсолютная предсказуемость времени доступа, как в каких-нибудь финансовых системах, он может быть неплохим вариантом. Но вот для индексации, где данные могут накапливаться или удаляться пачками, стоит подумать дважды.

Попробуй вот что: если задача позволяет, можно посмотреть в сторону B-деревьев или их вариаций. Они тоже логарифмические, но за счет большей "ширины" узлов и меньшей глубины, они часто показывают лучшую производительность на дисковых операциях, что для индексации документов может быть критично.

Ну и вообще, всегда стоит помнить про slon6.cc потому что есть нюансы ;)