Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ДЕРЕВЬЯ
- using namespace std;
- #include <iostream>
- #include <iomanip>
- #include <stdlib.h>
- #include <stdio.h>
- #include <Windows.h>
- const int n = 10;
- const int range = 500; // диапазон
- struct node { // создание структуры узел
- node* leftchild;
- node* rightchild;
- int num;
- };
- void GenerateTree(int num, node*& tree) { // создание дерева
- if (tree == NULL) {
- tree = new node;
- tree->num = num;
- tree->leftchild = tree->rightchild = NULL;
- }
- if (num < tree->num) {
- if (tree->leftchild != NULL) GenerateTree(num, tree->leftchild);
- else {
- tree->leftchild = new node;
- tree->leftchild->leftchild = tree->leftchild->rightchild = NULL;
- tree->leftchild->num = num;
- }
- }
- if (num > tree->num) {
- if (tree->rightchild != NULL) GenerateTree(num, tree->rightchild);
- else {
- tree->rightchild = new node;
- tree->rightchild->leftchild = tree->rightchild->rightchild = NULL;
- tree->rightchild->num = num;
- }
- }
- }
- int HeightTree(node*& tree) { // высота
- int h = 0;
- int r = 0;
- int l = 0;
- if (tree != NULL) {
- l = HeightTree(tree->leftchild);
- r = HeightTree(tree->rightchild);
- h = ((l > r) ? l : r) + 1;
- }
- return h;
- }
- int CountOfUzels(node * &tree) { // количество узлов
- int count = 0;
- if (tree != NULL) {
- count += CountOfUzels(tree->leftchild);
- count += CountOfUzels(tree->rightchild);
- if ((tree->leftchild != NULL) || (tree->rightchild != NULL))
- count++;
- }
- return count;
- }
- void SearchElement(int el, node * &tree) { // поиск элемента
- if (tree == NULL)
- cout << "NUll ";
- else {
- if (el == tree->num)
- cout << tree->num << " ";
- else {
- if (el > tree->num) {
- if (tree->rightchild) {
- SearchElement(el, tree->rightchild);
- cout << tree->num << " ";
- }
- else
- cout << "NUll ";
- }
- if (el < tree->num) {
- if (tree->leftchild) {
- SearchElement(el, tree->leftchild);
- cout << tree->num << " ";
- }
- else
- cout << "NUll ";
- }
- }
- }
- }
- void ClearTree(node * &tree) { // чистка дерева
- if (tree != NULL) {
- ClearTree(tree->leftchild);
- ClearTree(tree->rightchild);
- delete tree;
- tree = NULL;
- }
- }
- void Show(node * &tree) { // обход возрастание
- if (tree != NULL) {
- Show(tree->leftchild);
- cout << tree->num << " ";
- Show(tree->rightchild);
- }
- }
- void ShowReverse(node * &tree) { //зеркальное отображение убывание
- if (tree != NULL) {
- Show(tree->rightchild);
- cout << tree->num << " ";
- Show(tree->leftchild);
- }
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- srand(time(NULL));
- int count = 0;
- int* mass = new int[n];
- node* tree = NULL;
- node* tree1 = NULL;
- node* tree2 = NULL;
- int heightTree, countUzelsTree, heightTree1, countUzelsTree1, heightTree2, countUzelsTree2, el;
- // создание дерева
- cout << "Создание дерева по элементам/n";
- for (int i = 0; i < n; i++) {
- int a = rand() % range;
- mass[i] = a;
- cout << a << " ";
- GenerateTree(a, tree);
- }
- cout << "Прямой обход дерева, по возрастанию\n";
- //показ и зеркальный показ дерева
- Show(tree);
- cout << "Зеркальный показ, по убыванию\n";
- ShowReverse(tree);
- cout << "\n";
- //вычисление высоты и количества узлов
- heightTree = HeightTree(tree);
- countUzelsTree = CountOfUzels(tree);
- cout << "Высота дерева: " << heightTree;
- cout << "\n";
- cout << "Количество узлов: " << countUzelsTree;
- cout << "\n";
- // поиск элемента в дереве
- cout << "Какой элемент вы хотите найти: ";
- cin >> el;
- cout << "Искомый элемент и путь до элемента: ";
- SearchElement(el, tree);
- cout << "\n";
- // копирование(создание) дерева(1)
- for (int i = 0; i < n; i++)
- GenerateTree(mass[i], tree1);
- // вычисление высоты и количества узлов
- heightTree1 = HeightTree(tree1);
- countUzelsTree1 = CountOfUzels(tree1);
- cout << "Показ копии дерева, по возрастанию\n";
- Show(tree1);
- cout << "Показ копии дерева, по убыванию\n";
- ShowReverse(tree1);
- // сравнение дерева и дерева(1)
- cout << "\n"; cout << "Сравниваем дерево и его копию\n";
- if (heightTree >= heightTree1)
- cout << "высота дерева >= высоты копии дерева";
- else
- cout << "высота копии дерева > высоты дерева";
- cout << "\n";
- if (countUzelsTree >= countUzelsTree1)
- cout << "количество узлов дерева >= количество узлов копии дерева";
- else
- cout << "количество узлов копии дерева > количества узлов дерева";
- cout << "\n";
- // создание второго дерева рандомом
- for (int i = 0; i < n; i++) {
- int b = rand() % range;
- GenerateTree(b, tree2);
- }
- cout << "Прямой обход второго дерева, по возрастанию\n";
- Show(tree2);
- cout << "Зеркальный обход второго дерева, по убыванию\n";
- ShowReverse(tree2);
- cout << "\n";
- // вычисление высоты и количества узлов дерева(2) и сравнение его с деревом
- heightTree2 = HeightTree(tree2);
- countUzelsTree2 = CountOfUzels(tree2);
- cout << "Сравниваем деревья:\n";
- if (heightTree > heightTree2)
- cout << "высота дерева > высота дерева(2)";
- else
- cout << "высота дерева(2) > высота дерева";
- cout << "\n";
- if (countUzelsTree > countUzelsTree2)
- cout << "количество узлов дерева > количество узлов дерева(2)";
- else
- cout << "количество узлов дерева(2) > количество узлов дерева";
- cout << "\n";
- // чистка и удаление
- ClearTree(tree2);
- ClearTree(tree1);
- delete[] mass;
- ClearTree(tree);
- // cout << "Все деревья удалены/n";
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment