Я пишу функцию, которая выясняет, общее число элементов в дереве AVL по диапазону. Например, аргументы, которые прошли в это «AB» и «аи», то мне нужно, чтобы узнать, сколько элементов они находятся в AVL дерева находится в этом диапазоне.
В настоящее время мой способ сделать это, чтобы перемещаться по дереву каждый раз, когда клиент вызывает его. Но так как число элементов в моих AVL дерева меняться большим, он принимает навсегда, если клиент вызывает эту функцию слишком много раз. Есть ли более быстрый способ сделать это?
Мой диапазон функций:
void range(AvlTree T, char* k1, char* k2) {
if ( T == NULL )
return;
if ( strcmp(k1, T->Element) < 0 )
range(T->Left, k1, k2);
if ( strcmp(k1, T->Element) <= 0 && strcmp(k2, T->Element) >= 0 )
total++;
if ( strcmp(k2, T->Element) > 0 )
range(T->Right, k1, k2);
}