Нужно выполнить вращение для самого разбалансированого поддерева
Нам дали задачу. "Написать бинарное дерево и выполнить вращение для самого разбалансированного поддерева." Дерево я написал и некоторые функции к нему, а как выполнить вращение не понимаю. Обход использовал симметричный и грубое заполнение дерева, потом хочу сделать всё через файл. Помогите с написанием функции для вращения.
#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;
}```