Помогите перевести рекурсивный алгоритм в циклический при добавлении 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;
}

Проблема в том что при добавлении огромного количества элементов работа программы становится слишком долгой. Цикл, скорее всего, сильно ускорит.


Ответы (0 шт):