Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <iostream>
- # include <conio.h>
- # include <random>
- # include <time.h>
- using namespace std;
- //Наша структура
- struct node
- {
- int info; //Информационное поле
- node *l, *r;//Левая и Правая часть дерева
- };
- node * tree = NULL; //Объявляем переменную, тип которой структура Дерево
- struct node1
- {
- int info; //Информационное поле
- node1 *l, *r;//Левая и Правая часть дерева
- };
- node1 * tree1 = NULL; //Объявляем переменную, тип которой структура Дерево
- /*ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО*/
- void push(int a, node **t)
- {
- if ((*t) == NULL) //Если дерева не существует
- {
- (*t) = new node; //Выделяем память
- (*t)->info = a; //Кладем в выделенное место аргумент a
- (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
- return; //Заложили семечко, выходим
- }
- //Дерево есть
- if (a>(*t)->info) push(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
- else push(a, &(*t)->l); //Иначе кладем его влево
- }
- void push1(int a, node1 **t)
- {
- if ((*t) == NULL) //Если дерева не существует
- {
- (*t) = new node1; //Выделяем память
- (*t)->info = a; //Кладем в выделенное место аргумент a
- (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
- return; //Заложили семечко, выходим
- }
- //Дерево есть
- if (a>(*t)->info) push1(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
- else push1(a, &(*t)->l); //Иначе кладем его влево
- }
- /*ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ*/
- void print(node *t, int u)
- {
- if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
- else //Иначе
- {
- print(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
- cout << t->info << ' '; //И показываем элемент
- u--;
- }
- print(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
- }
- void print1(node1 *t, int u)
- {
- if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
- else //Иначе
- {
- print1(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
- cout << t->info << ' '; //И показываем элемент
- u--;
- }
- print1(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
- }
- bool is_symmetric(node* a, node1* b)
- {
- if (!a && !b
- ||!a->r && !a->l && !b->r && !b->l)
- return true;
- if (a->r && b->l)
- return is_symmetric(a->r, b->l);
- if (a->l && b->r)
- return is_symmetric(a->l, b->r);
- return false;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int n; //Количество элементов
- int s, b; //Число, передаваемое в дерево
- cout << "введите количество элементов ";
- cin >> n; //Вводим количество элементов
- srand(time(NULL));
- for (int i = 0; i<n; ++i)
- {
- s = rand() % 100;
- push(s, &tree); //И каждый кладем в дерево
- }
- cout << "ваше дерево номер 1\n";
- print(tree, 0);
- cout << endl;
- cout << "Ваше древо номер 2\n";
- for (int i = 0; i<n; ++i)
- {
- b = rand() % 100;
- push1(b, &tree1); //И каждый кладем в дерево
- }
- print1(tree1, 0);
- cout << endl << is_symmetric(tree, tree1) << endl;
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement