#include "bst.h" Tree *insert(Tree *root, int value) { if (root == nullptr) { root = new Tree{value, nullptr, nullptr}; } else if (value < root->info) { root->left = insert(root->left, value); } else if (value > root->info) { root->right = insert(root->right, value); } return root; } Tree *search(Tree *root, int value) { Tree *ptr = root; while (ptr != nullptr) { if (value > ptr->info) ptr = ptr->right; else if (value < ptr->info) ptr = ptr->left; else return ptr; } return nullptr; } void traverseInOrder(Tree *root, std::vector *vec) { if (root != nullptr) { traverseInOrder(root->left, vec); vec->push_back(root->info); traverseInOrder(root->right, vec); } } Tree *rebuild(std::vector *vec, int start, int end) { if (start > end) return nullptr; int mid = (start + end) / 2; Tree *node = new Tree(); node->info = vec->at(mid); node->left = rebuild(vec, start, mid - 1); node->right = rebuild(vec, mid + 1, end); return node; } Tree *balance(Tree *root) { std::vector vec; traverseInOrder(root, &vec); return rebuild(&vec, 0, vec.size() - 1); } void deleteTree(Tree *root) { if (root != nullptr) { deleteTree(root->left); deleteTree(root->right); delete root; } }