Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. /*
  2. Дано число N(>0) и набор из N чисел.
  3. 1) Отсортировать по возрастанию.
  4. 2) Создать функцию добавления элемента в дерево.
  5. 3) Реализовать обходы:
  6. 3.1 - Прямой
  7. 3.2 - Симметричный
  8. 3.3 - Обратный
  9. */
  10.  
  11.  
  12. #include <iostream>
  13. #include <Windows.h>
  14. #include <cmath>
  15.  
  16. using namespace std;
  17.  
  18. struct Tree
  19. {
  20. int val;
  21. Tree* left;
  22. Tree* right;
  23. };
  24.  
  25. Tree* makenode(int val)
  26. {
  27. Tree *tempTree = new Tree;
  28. tempTree->left = tempTree->right = nullptr;
  29. tempTree->val = val;
  30. return tempTree;
  31. }
  32.  
  33. void setLeft(Tree* aTree, int val) {
  34. aTree->left = makenode(val);
  35.  
  36. }
  37.  
  38.  
  39. void setRight(Tree* aTree, int val) {
  40. aTree->right = makenode(val);
  41.  
  42. }
  43.  
  44. void insert(Tree *aTree, int val)
  45. {
  46. while (true) {
  47. if (val <= aTree->val) {
  48. if (aTree->left != nullptr) {
  49. aTree = aTree->left;
  50. }
  51. else {
  52. setLeft(aTree, val);
  53. break;
  54. }
  55. }
  56. else {
  57. if (aTree->right != nullptr) {
  58. aTree = aTree->right;
  59. }
  60. else {
  61. setRight(aTree, val);
  62. break;
  63. }
  64. }
  65. }
  66. }
  67.  
  68. void inTrav(Tree * aTree) {
  69. if (aTree->left != nullptr) {
  70. inTrav(aTree->left);
  71. }
  72. cout << "()==[:::::::::::::>" << aTree->val << endl;
  73. if (aTree->right != nullptr) inTrav(aTree->right);
  74. }
  75.  
  76. void inTheIiteral(Tree *tree)//в прямом
  77. {
  78. if (NULL == tree) return; //Если дерева нет, выходим
  79.  
  80. cout << "()==[:::::::::::::>" << tree->val << endl; //Посетили узел
  81. inTheIiteral(tree->left); //Обошли левое поддерево
  82. inTheIiteral(tree->right); //Обошли правое поддерево
  83. }
  84.  
  85. void symmetry(Tree *tree)
  86. {
  87. if (NULL == tree) return; //Если дерева нет, выходим
  88.  
  89. symmetry(tree->left); //Обошли левое поддерево
  90. cout << "()==[:::::::::::::>" << tree->val << endl; //Посетили узел
  91. symmetry(tree->right); //Обошли правое поддерево
  92. }
  93.  
  94. void reverse(Tree *tree)
  95. {
  96. if (NULL == tree) return; //Если дерева нет, выходим
  97.  
  98. reverse(tree->left); //Обошли левое поддерево
  99. reverse(tree->right); //Обошли правое поддерево
  100.  
  101. cout << "()==[:::::::::::::>" << tree->val << endl; //Посетили узел
  102. }
  103.  
  104.  
  105. int main()
  106. {
  107. SetConsoleCP(1251);
  108. SetConsoleOutputCP(1251);
  109.  
  110. int N;
  111. cout << "Введите число N вершин бинарного дерева: ";
  112. cin >> N;
  113.  
  114. Tree* myTree = makenode(65);
  115. for (int i = 0; i < N - 1; i++) {
  116. insert(myTree, rand() % 100);
  117. }
  118.  
  119. cout << "Сортировка элементов: " << endl;
  120. inTrav(myTree);
  121. cout << "-----------------------------------------------" << endl;
  122. cout << "Обход в прямом порядке: " << endl;
  123. inTheIiteral(myTree);
  124. cout << "-----------------------------------------------" << endl;
  125. cout << "Симметричный обход: " << endl;
  126. symmetry(myTree);
  127. cout << "-----------------------------------------------" << endl;
  128. cout << "Обратный обход: " << endl;
  129. reverse(myTree);
  130.  
  131. return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement