Advertisement
Guest User

WEDEVR

a guest
Oct 1st, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.91 KB | None | 0 0
  1. # include <iostream>
  2. # include <conio.h>
  3. # include <random>
  4. # include <time.h>
  5.  
  6. using namespace std;
  7. //Наша структура
  8. struct node
  9.         {
  10.         int info; //Информационное поле
  11.         node *l, *r;//Левая и Правая часть дерева
  12.         };
  13.  
  14. node * tree = NULL; //Объявляем переменную, тип которой структура Дерево
  15. struct node1
  16.         {
  17.         int info; //Информационное поле
  18.         node1 *l, *r;//Левая и Правая часть дерева
  19.         };
  20.  
  21. node1 * tree1 = NULL; //Объявляем переменную, тип которой структура Дерево
  22.  
  23.                       /*ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО*/
  24. void push(int a, node **t)
  25.         {
  26.         if ((*t) == NULL) //Если дерева не существует
  27.                 {
  28.                 (*t) = new node; //Выделяем память
  29.                 (*t)->info = a; //Кладем в выделенное место аргумент a
  30.                 (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
  31.                 return; //Заложили семечко, выходим
  32.                 }
  33.         //Дерево есть
  34.         if (a>(*t)->info) push(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
  35.         else push(a, &(*t)->l); //Иначе кладем его влево
  36.         }
  37. void push1(int a, node1 **t)
  38.         {
  39.         if ((*t) == NULL) //Если дерева не существует
  40.                 {
  41.                 (*t) = new node1; //Выделяем память
  42.                 (*t)->info = a; //Кладем в выделенное место аргумент a
  43.                 (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
  44.                 return; //Заложили семечко, выходим
  45.                 }
  46.         //Дерево есть
  47.         if (a>(*t)->info) push1(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
  48.         else push1(a, &(*t)->l); //Иначе кладем его влево
  49.         }
  50. /*ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ*/
  51. void print(node *t, int u)
  52.         {
  53.         if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
  54.         else //Иначе
  55.                 {
  56.                 print(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
  57.                 cout << t->info << ' '; //И показываем элемент
  58.                 u--;
  59.                 }
  60.         print(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
  61.         }
  62. void print1(node1 *t, int u)
  63.         {
  64.         if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
  65.         else //Иначе
  66.                 {
  67.                 print1(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
  68.                 cout << t->info << ' '; //И показываем элемент
  69.                 u--;
  70.                 }
  71.         print1(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
  72.         }
  73.  
  74. bool is_symmetric(node* a, node1* b)
  75.         {
  76.         if (!a && !b
  77.           ||!a->r && !a->l && !b->r && !b->l)
  78.                 return true;
  79.         if (a->r && b->l)
  80.                 return is_symmetric(a->r, b->l);
  81.         if (a->l && b->r)
  82.                 return is_symmetric(a->l, b->r);
  83.         return false;
  84.         }
  85.  
  86. int main()
  87.         {
  88.         setlocale(LC_ALL, "Russian");
  89.         int n; //Количество элементов
  90.         int s, b; //Число, передаваемое в дерево
  91.         cout << "введите количество элементов  ";
  92.         cin >> n; //Вводим количество элементов
  93.         srand(time(NULL));
  94.         for (int i = 0; i<n; ++i)
  95.                 {
  96.                 s = rand() % 100;
  97.                 push(s, &tree); //И каждый кладем в дерево
  98.                 }
  99.         cout << "ваше дерево номер 1\n";
  100.         print(tree, 0);
  101.         cout << endl;
  102.         cout << "Ваше древо номер 2\n";
  103.         for (int i = 0; i<n; ++i)
  104.                 {
  105.                 b = rand() % 100;
  106.                 push1(b, &tree1); //И каждый кладем в дерево
  107.                 }
  108.         print1(tree1, 0);
  109.         cout << endl << is_symmetric(tree, tree1) << endl;
  110.         _getch();
  111.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement