Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (8)
.cpp#include <iostream>
#include <windows.h>
using namespace std;
struct TreeNode {
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int val) : data(val), left(nullptr), right(nullptr) {}
};
class BinarySearchTree {
private:
TreeNode* root;
TreeNode* insert(TreeNode* node, int value) {
if (!node) return new TreeNode(value);
if (value < node->data) node->left = insert(node->left, value);
else if (value > node->data) node->right = insert(node->right, value);
return node;
}
TreeNode* remove(TreeNode* node, int value) {
if (!node) return nullptr;
if (value < node->data) node->left = remove(node->left, value);
else if (value > node->data) node->right = remove(node->right, value);
else {
if (!node->left) {
TreeNode* temp = node->right;
delete node;
return temp;
} else if (!node->right) {
TreeNode* temp = node->left;
delete node;
return temp;
}
TreeNode* temp = minValueNode(node->right);
node->data = temp->data;
node->right = remove(node->right, temp->data);
}
return node;
}
TreeNode* minValueNode(TreeNode* node) {
TreeNode* current = node;
while (current && current->left) current = current->left;
return current;
}
bool search(TreeNode* node, int value) {
if (!node) return false;
if (node->data == value) return true;
if (value < node->data) return search(node->left, value);
return search(node->right, value);
}
void inOrder(TreeNode* node) {
if (!node) return;
inOrder(node->left);
cout << node->data << " ";
inOrder(node->right);
}
void destroyTree(TreeNode* node) {
if (!node) return;
destroyTree(node->left);
destroyTree(node->right);
delete node;
}
public:
BinarySearchTree() : root(nullptr) {
cout << "Создано пустое бинарное дерево поиска" << endl;
}
~BinarySearchTree() {
destroyTree(root);
cout << "Дерево удалено" << endl;
}
void add(int value) {
root = insert(root, value);
cout << "Добавлен элемент: " << value << endl;
}
void remove(int value) {
if (contains(value)) {
root = remove(root, value);
cout << "Удален элемент: " << value << endl;
} else {
cout << "Элемент " << value << " не найден" << endl;
}
}
bool contains(int value) {
bool found = search(root, value);
cout << "Элемент " << value << (found ? " найден" : " не найден") << endl;
return found;
}
void print() {
cout << "Элементы дерева (в порядке возрастания): ";
inOrder(root);
cout << endl;
}
};
int main() {
SetConsoleOutputCP(65001);
BinarySearchTree bst;
bst.add(5);
bst.add(3);
bst.add(7);
bst.add(1);
bst.add(4);
bst.print();
bst.contains(3);
bst.contains(10);
bst.remove(3);
bst.print();
bst.remove(10); // несуществующий элемент
return 0;
}
Соседние файлы в папке Лаба2
