RBST.Рандомизированное бинарное дерево поиска. Не получается выполнить вставку в корень

Я не совсем понимаю каким образом провернуть вставку в корень дерева с левым или правым поворотом. Сами функции работают нормально, но при этом дерево не меняется.
Как сделать так чтобы вместе с указателями менялось и дерево?
Из RBSTree.h:

Collection<K,T>::Node* insert(Collection<K,T>::Node*& rootF, K key, T value) {
        srand((int)time(0));
        if (rootF == nullptr) {
            return new typename Collection<K, T>::Node(key, value); 
        }
        if ((rand() % (rootF->sizeNode + 1)) == 0) {
            return insertroot(rootF, key, value); //тут происходит вставка в корень, но дерево не меняется
        }

        if (rootF->key > key)
        {//if(rootF->left != nullptr)
            rootF->left = insert(rootF->left, key, value);
        }
        else
        {   //if (rootF->left != nullptr)
            rootF->right = insert(rootF->right, key, value);
        }
        rootF->fixsize();
        return rootF;
    }

ТУТ ПОЛНЫЙ ПРОЕКТ

Ссылка на проект тут полный код для воспроизведения проблемы.


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

Автор решения: Ван Хельсинг

Я думаю тебе нужно использовать ссылки & и тогда меняться будет.

Collection<K,T>::Node* insert(Collection<K,T>::Node& rootF, K key, T value) {
        srand((int)time(0));
        if (rootF == nullptr) {
            return new typename Collection<K, T>::Node(key, value); 
        }
        if ((rand() % (rootF->sizeNode + 1)) == 0) {
            return insertroot(rootF, key, value); //тут происходит вставка в корень, но дерево не меняется
        }

        if (rootF->key > key)
        {//if(rootF->left != nullptr)
            rootF->left = insert(rootF->left, key, value);
        }
        else
        {   //if (rootF->left != nullptr)
            rootF->right = insert(rootF->right, key, value);
        }
        rootF->fixsize();
        return rootF;
    }
→ Ссылка