Нужно выполнить вращение для самого разбалансированого поддерева

Нам дали задачу. "Написать бинарное дерево и выполнить вращение для самого разбалансированного поддерева." Дерево я написал и некоторые функции к нему, а как выполнить вращение не понимаю. Обход использовал симметричный и грубое заполнение дерева, потом хочу сделать всё через файл. Помогите с написанием функции для вращения.

#include <iostream>

using namespace std;

//Структура представляющая элемент дерева
struct tree_element {
    int value;
    struct tree_element* left;
    struct tree_element* right;
};

//Создание нового элемениа с заданным значением
tree_element* create_tree_element(int i);

//Вставляем элемент elem в дерево с корнем root
void insert_into_tree(tree_element* root, tree_element* elem);

//Печать дерева от элемента вниз
void print_tree(tree_element* cur_elem);

tree_element* create_tree_element(int i) {
    tree_element* elem = new tree_element;
    elem->value = i;
    elem->left = NULL;
    elem->right = NULL;
    return elem;
}

void insert_into_tree(tree_element* root, tree_element* elem) {
    if (elem->value < root->value) {
        //Идём в левое проддерево
        if (root->left == NULL) {
            //Левое поддерево пустое. Сюда и вставляем ноавый элемент
            root->left = elem;
        }
        else {
            //Слева что-то есть. Рекурсивно вставляемся в левое поддерево
            insert_into_tree(root->left, elem);
        }
    }
    else {
        //Идём в правое проддерево
        if (root->right == NULL) {
            //Правое поддерево пустое. Сюда и вставляем ноавый элемент
            root->right = elem;
        }
        else {
            //Справа что-то есть. Рекурсивно вставляемся в правое поддерево
            insert_into_tree(root->right, elem);
        }
    }
}

void print_tree (tree_element* cur_elem) {
    if(cur_elem->left != NULL) {
        print_tree(cur_elem->left);
    }
    cout << "Value = " << cur_elem->value << endl;
    if (cur_elem->right != NULL) {
        print_tree(cur_elem->right);
    }
}

int main() {
    int arr[6] = {-3, -5, 42, 2, -2, 8};
    tree_element* root = create_tree_element(0);
    for (int i = 0; i < 6; i++) {
        tree_element* el = create_tree_element(arr[i]);
        insert_into_tree(root, el);
    }
    cout << "My tree" << endl;
    print_tree(root);

    return 0;
}```

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