Neon_Falcon

Дерево с подобием меню

Jun 12th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.33 KB | None | 0 0
  1. // ДЕРЕВЬЯ
  2. using namespace std;
  3. #include <iostream>
  4. #include <iomanip>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <Windows.h>
  8. const int n = 10;
  9. const int range = 500; // диапазон
  10.  
  11. struct node { // создание структуры узел
  12. node* leftchild;
  13. node* rightchild;
  14. int num;
  15. };
  16.  
  17. void GenerateTree(int num, node*& tree) { // создание дерева
  18. if (tree == NULL) {
  19. tree = new node;
  20. tree->num = num;
  21. tree->leftchild = tree->rightchild = NULL;
  22. }
  23. if (num < tree->num) {
  24. if (tree->leftchild != NULL) GenerateTree(num, tree->leftchild);
  25. else {
  26. tree->leftchild = new node;
  27. tree->leftchild->leftchild = tree->leftchild->rightchild = NULL;
  28. tree->leftchild->num = num;
  29. }
  30. }
  31. if (num > tree->num) {
  32. if (tree->rightchild != NULL) GenerateTree(num, tree->rightchild);
  33. else {
  34. tree->rightchild = new node;
  35. tree->rightchild->leftchild = tree->rightchild->rightchild = NULL;
  36. tree->rightchild->num = num;
  37. }
  38. }
  39. }
  40.  
  41. int HeightTree(node*& tree) { // высота
  42. int h = 0;
  43. int r = 0;
  44. int l = 0;
  45. if (tree != NULL) {
  46. l = HeightTree(tree->leftchild);
  47. r = HeightTree(tree->rightchild);
  48. h = ((l > r) ? l : r) + 1;
  49. }
  50. return h;
  51. }
  52.  
  53. int CountOfUzels(node * &tree) { // количество узлов
  54. int count = 0;
  55. if (tree != NULL) {
  56. count += CountOfUzels(tree->leftchild);
  57. count += CountOfUzels(tree->rightchild);
  58. if ((tree->leftchild != NULL) || (tree->rightchild != NULL))
  59. count++;
  60. }
  61. return count;
  62. }
  63.  
  64. void SearchElement(int el, node * &tree) { // поиск элемента
  65. if (tree == NULL)
  66. cout << "NUll ";
  67. else {
  68. if (el == tree->num)
  69. cout << tree->num << " ";
  70. else {
  71. if (el > tree->num) {
  72. if (tree->rightchild) {
  73. SearchElement(el, tree->rightchild);
  74. cout << tree->num << " ";
  75. }
  76. else
  77. cout << "NUll ";
  78. }
  79. if (el < tree->num) {
  80. if (tree->leftchild) {
  81. SearchElement(el, tree->leftchild);
  82. cout << tree->num << " ";
  83. }
  84. else
  85. cout << "NUll ";
  86. }
  87. }
  88. }
  89. }
  90.  
  91. void ClearTree(node * &tree) { // чистка дерева
  92. if (tree != NULL) {
  93. ClearTree(tree->leftchild);
  94. ClearTree(tree->rightchild);
  95. delete tree;
  96. tree = NULL;
  97. }
  98. }
  99.  
  100. void Show(node * &tree) { // обход возрастание
  101. if (tree != NULL) {
  102. Show(tree->leftchild);
  103. cout << tree->num << " ";
  104. Show(tree->rightchild);
  105. }
  106. }
  107.  
  108. void ShowReverse(node * &tree) { //зеркальное отображение убывание
  109. if (tree != NULL) {
  110. Show(tree->rightchild);
  111. cout << tree->num << " ";
  112. Show(tree->leftchild);
  113. }
  114. }
  115.  
  116. int main() {
  117. SetConsoleCP(1251);
  118. SetConsoleOutputCP(1251);
  119. srand(time(NULL));
  120. int count = 0;
  121. int* mass = new int[n];
  122. node* tree = NULL;
  123. node* tree1 = NULL;
  124. node* tree2 = NULL;
  125. int heightTree, countUzelsTree, heightTree1, countUzelsTree1, heightTree2, countUzelsTree2, el;
  126. // создание дерева
  127. cout << "Создание дерева по элементам/n";
  128. for (int i = 0; i < n; i++) {
  129. int a = rand() % range;
  130. mass[i] = a;
  131. cout << a << " ";
  132. GenerateTree(a, tree);
  133. }
  134.  
  135. cout << "Прямой обход дерева, по возрастанию\n";
  136. //показ и зеркальный показ дерева
  137. Show(tree);
  138. cout << "Зеркальный показ, по убыванию\n";
  139. ShowReverse(tree);
  140. cout << "\n";
  141. //вычисление высоты и количества узлов
  142. heightTree = HeightTree(tree);
  143. countUzelsTree = CountOfUzels(tree);
  144.  
  145. cout << "Высота дерева: " << heightTree;
  146. cout << "\n";
  147.  
  148. cout << "Количество узлов: " << countUzelsTree;
  149. cout << "\n";
  150. // поиск элемента в дереве
  151. cout << "Какой элемент вы хотите найти: ";
  152. cin >> el;
  153. cout << "Искомый элемент и путь до элемента: ";
  154. SearchElement(el, tree);
  155. cout << "\n";
  156. // копирование(создание) дерева(1)
  157. for (int i = 0; i < n; i++)
  158. GenerateTree(mass[i], tree1);
  159. // вычисление высоты и количества узлов
  160. heightTree1 = HeightTree(tree1);
  161. countUzelsTree1 = CountOfUzels(tree1);
  162. cout << "Показ копии дерева, по возрастанию\n";
  163. Show(tree1);
  164. cout << "Показ копии дерева, по убыванию\n";
  165. ShowReverse(tree1);
  166. // сравнение дерева и дерева(1)
  167. cout << "\n"; cout << "Сравниваем дерево и его копию\n";
  168. if (heightTree >= heightTree1)
  169. cout << "высота дерева >= высоты копии дерева";
  170. else
  171. cout << "высота копии дерева > высоты дерева";
  172. cout << "\n";
  173. if (countUzelsTree >= countUzelsTree1)
  174. cout << "количество узлов дерева >= количество узлов копии дерева";
  175. else
  176. cout << "количество узлов копии дерева > количества узлов дерева";
  177. cout << "\n";
  178. // создание второго дерева рандомом
  179. for (int i = 0; i < n; i++) {
  180. int b = rand() % range;
  181. GenerateTree(b, tree2);
  182. }
  183. cout << "Прямой обход второго дерева, по возрастанию\n";
  184. Show(tree2);
  185. cout << "Зеркальный обход второго дерева, по убыванию\n";
  186. ShowReverse(tree2);
  187. cout << "\n";
  188. // вычисление высоты и количества узлов дерева(2) и сравнение его с деревом
  189. heightTree2 = HeightTree(tree2);
  190. countUzelsTree2 = CountOfUzels(tree2);
  191. cout << "Сравниваем деревья:\n";
  192. if (heightTree > heightTree2)
  193. cout << "высота дерева > высота дерева(2)";
  194. else
  195. cout << "высота дерева(2) > высота дерева";
  196. cout << "\n";
  197. if (countUzelsTree > countUzelsTree2)
  198. cout << "количество узлов дерева > количество узлов дерева(2)";
  199. else
  200. cout << "количество узлов дерева(2) > количество узлов дерева";
  201. cout << "\n";
  202. // чистка и удаление
  203. ClearTree(tree2);
  204. ClearTree(tree1);
  205. delete[] mass;
  206. ClearTree(tree);
  207. // cout << "Все деревья удалены/n";
  208. system("pause");
  209. return 0;
  210. }
Advertisement
Add Comment
Please, Sign In to add comment