Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба1 / Laba 1 (9)
.cpp#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;
struct TreeNode {
double data;
TreeNode* left;
TreeNode* right;
TreeNode(double val) : data(val), left(nullptr), right(nullptr) {}
};
class BinaryTree {
private:
TreeNode* root;
TreeNode* insert(TreeNode* node, double value) {
if (!node) return new TreeNode(value);
if (value < node->data) node->left = insert(node->left, value);
else node->right = insert(node->right, value);
return node;
}
TreeNode* remove(TreeNode* node, double 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 contains(TreeNode* node, double value) {
if (!node) return false;
if (node->data == value) return true;
if (value < node->data) return contains(node->left, value);
return contains(node->right, value);
}
void inOrder(TreeNode* node, vector<double>& result) {
if (!node) return;
inOrder(node->left, result);
result.push_back(node->data);
inOrder(node->right, result);
}
public:
BinaryTree() : root(nullptr) {
cout << "Создано пустое бинарное дерево" << endl;
}
void add(double value) {
root = insert(root, value);
cout << "Добавлен элемент: " << value << endl;
}
void remove(double value) {
if (contains(value)) {
root = remove(root, value);
cout << "Удален элемент: " << value << endl;
} else {
cout << "Элемент " << value << " не найден" << endl;
}
}
bool contains(double value) {
bool found = contains(root, value);
cout << "Элемент " << value << (found ? " найден" : " не найден") << " в дереве" << endl;
return found;
}
vector<double> getElements() {
vector<double> result;
inOrder(root, result);
return result;
}
void print() {
vector<double> elements = getElements();
cout << "Элементы дерева (в порядке возрастания): ";
for (double elem : elements) {
cout << elem << " ";
}
cout << endl;
}
};
int main() {
SetConsoleOutputCP(65001);
BinaryTree tree;
cout << "=== Работа с бинарным деревом ===" << endl;
tree.add(5.0);
tree.add(3.0);
tree.add(7.0);
tree.add(1.0);
tree.add(4.0);
tree.print();
tree.contains(3.0);
tree.contains(10.0);
tree.remove(3.0);
tree.print();
tree.remove(10.0); // Несуществующий элемент
return 0;
}
Соседние файлы в папке Лаба1
