Advertisement
fabis_sparks

MyTP3Lab

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