Помогите перевести рекурсивный алгоритм в циклический при добавлении AVL дерева
Вот такой код добавления элемента. Классическая рекурсия и балансировка.
node* insert(string x, string y, node* t)
{
if (t == NULL)
{
t = new node;
t->key = x;
t->field = y;
t->height = 0;
t->left = t->right = NULL;
}
else if (x < t->key)
{
t->left = insert(x, y, t->left);
if (height(t->left) - height(t->right) == 2)
{
if (x < t->left->key)
t = singleRightRotate(t);
else
t = doubleRightRotate(t);
}
}
else if (x > t->key)
{
t->right = insert(x, y, t->right);
if (height(t->right) - height(t->left) == 2)
{
if (x > t->right->key)
t = singleLeftRotate(t);
else
t = doubleLeftRotate(t);
}
}
t->height = max(height(t->left), height(t->right)) + 1;
return t;
}
Проблема в том что при добавлении огромного количества элементов работа программы становится слишком долгой. Цикл, скорее всего, сильно ускорит.