Advertisement
x2311

Untitled

Jun 7th, 2022
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6. /**
  7.  * Визначити, чи входить заданий елемент до дерева.
  8.  */
  9. struct Node {
  10.     int x = 0;
  11.     Node *left;
  12.     Node *right;
  13. };
  14.  
  15. /**
  16.  * Показати Дерево
  17.  * @param tree Делево
  18.  */
  19. void showTree(Node *&tree) {
  20.     if (tree != NULL) {
  21.         showTree(tree->left);
  22.         cout << tree->x << endl;
  23.         showTree(tree->right);
  24.     }
  25. }
  26.  
  27. /**
  28.  * додати Node
  29.  * @param x
  30.  * @param tree Делево
  31.  */
  32. void addNode(int x, Node *&tree) {
  33.     if (NULL == tree) {
  34.         tree = new Node;
  35.         tree->x = x;
  36.         tree->left = tree->right = NULL;
  37.     }
  38.     if (x < tree->x) {
  39.         if (tree->left != NULL) {
  40.             addNode(x, tree->left);
  41.         } else {
  42.             tree->left = new Node;
  43.             tree->left->left = tree->left->right = NULL;
  44.             tree->left->x = x;
  45.         }
  46.     }
  47.     if (x > tree->x) {
  48.         if (tree->right != NULL) {
  49.             addNode(x, tree->right);
  50.         } else {
  51.             tree->right = new Node;
  52.             tree->right->left = tree->right->right = NULL;
  53.             tree->right->x = x;
  54.         }
  55.     }
  56.  
  57. }
  58.  
  59. /**
  60.  *
  61.  * @param tree Делево
  62.  * @param number число
  63.  * @param check перевірка
  64.  */
  65. void workerFindElements(Node *&tree, int number, bool &check) {
  66.     if (tree != NULL) {
  67.         if (tree->x == number) {
  68.             check = true;
  69.         }
  70.         workerFindElements(tree->left, number, check);
  71.         workerFindElements(tree->right, number, check);
  72.     }
  73. };
  74.  
  75. /**
  76.  *
  77.  * @param tree Делево
  78.  * @param number число
  79.  * @return checkElement
  80.  */
  81. bool findElement(Node *&tree, int number) {
  82.     bool checkElement = false;
  83.     workerFindElements(tree, number, checkElement);
  84.     return checkElement;
  85. }
  86.  
  87. /**
  88.  *
  89.  * @param tree Делево
  90.  */
  91. void delTree(Node *&tree) {
  92.     if (tree != NULL) {
  93.         delTree(tree->left);
  94.         delTree(tree->right);
  95.         delete tree;
  96.         tree = NULL;
  97.     }
  98. }
  99.  
  100. /**
  101.     * Мы должні узнать если элемент в дереве
  102.     * С начала заполняем рандомом, потом спрашиваем у пользователя элемент.
  103.     * Потом ищем в новом дереве и выводим результат нашли мы его или нет
  104.  * @return 0
  105.  */
  106. int main() {
  107.     Node *tree = NULL;
  108.     srand(time(0));
  109.     int number;
  110.  
  111.     for (int i = 0; i < 20; i++) {
  112.         addNode(rand(), tree);
  113.     }
  114.  
  115.     showTree(tree); // показать дерево
  116.  
  117.     cout << "-------------" << endl;
  118.     cout << "Enter number" << endl;
  119.     cin >> number; // Просим вести что-то
  120.     string result = findElement(tree, number) ? "Element found" : "Element not found"; // результат
  121.     cout << result << endl;
  122.  
  123.     delTree(tree); // удаления дерева
  124.  
  125.     system("pause"); //для удобства
  126.  
  127.     return 0;
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement