Maxim_Leo

Untitled

May 13th, 2022
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. struct Tree {
  7. int value;
  8. Tree* left;
  9. Tree* right;
  10. };
  11.  
  12. Tree* Add(Tree*& a, int elem) {
  13. if (!a) {
  14. a = new Tree;
  15. a->value = elem;
  16. a->left = nullptr;
  17. a->right = nullptr;
  18. return 0;
  19. }
  20. else if (elem < a->value) {
  21. Add(a->left, elem);
  22. }
  23. else {
  24. Add(a->right, elem);
  25. }
  26. return a;
  27. }
  28.  
  29. Tree* FindParent(Tree*& start, int x, Tree* parent = nullptr) {
  30.  
  31. if (start == nullptr)
  32. return NULL;
  33. if (start->value == x)
  34. return parent;
  35. else {
  36. if (x < start->value) return FindParent(start->left, x, parent);
  37. else return FindParent(start->right, x, parent);
  38. }
  39. }
  40.  
  41. Tree*& Delete(Tree*& tree, int value) {
  42. if (tree == NULL)
  43. return tree;
  44.  
  45. if (value == tree->value) {
  46.  
  47. Tree* tmp;
  48. if (tree->right == NULL)
  49. tmp = tree->left;
  50. else {
  51.  
  52. Tree* ptr = tree->right;
  53. if (ptr->left == NULL) {
  54. ptr->left = tree->left;
  55. tmp = ptr;
  56. }
  57. else {
  58.  
  59. Tree* pmin = ptr->left;
  60. while (pmin->left != NULL) {
  61. ptr = pmin;
  62. pmin = ptr->left;
  63. }
  64. ptr->left = pmin->right;
  65. pmin->left = tree->left;
  66. pmin->right = tree->right;
  67. tmp = pmin;
  68. }
  69. }
  70. Tree* parent= FindParent(tree, value);
  71. delete tree;
  72. return tmp;
  73. }
  74. else if (value < tree->value)
  75. tree->left = Delete(tree->left, value);
  76. else
  77. tree->right = Delete(tree->right, value);
  78. return tree;
  79. }
  80. void printTree(Tree*& a) {
  81. if (a) {
  82. cout << a->value << " ";
  83. printTree(a->left);
  84. printTree(a->right);
  85.  
  86. }
  87. else return;
  88. }
  89.  
  90. bool findTree(Tree* a, int value) {
  91. int cmp = 0;
  92. while (a && value != a->value) {
  93. if (value < a->value) a = a->left;
  94. else a = a->right;
  95. cmp++;
  96. }
  97. cout << "Количество сравнений: " << cmp << endl;
  98. return a != NULL;
  99. }
  100.  
  101.  
  102.  
  103. /* Tree* b=new Tree;
  104. b->value = x;
  105. int cmp = 0;
  106. Tree* parent = nullptr;
  107. Barrier(a,b);
  108. while (x != b->value) {
  109. if (x < a->value) a = a->left;
  110. else a = a->right;
  111. cmp++;
  112. }
  113. if (&a == &b) return false;
  114. cout << "Количество сравнений: " << cmp << endl;
  115. return a != NULL;*/
  116. int main()
  117. {
  118. setlocale(LC_ALL, "Russian");
  119. int x;
  120. int n;
  121. cout << "Введите количество элементов: " << endl;
  122. cin >> n;
  123. Tree* tree = NULL;
  124. cout << "Введите элементы дерева: " << endl;
  125. for (int i = 0; i < n; i++) {
  126. cin >> x;
  127. Add(tree, x);
  128. }
  129. cout << "Элементы дерева: " << endl;
  130. printTree(tree);
  131. cout << endl;
  132. cout << findTree(tree, 5) << endl << endl;
  133. cout << endl;
  134. Delete(tree, 3);
  135. printTree(tree);
  136. }
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. /*Tree*& addBarrier(Tree*& start, int stop) {
  156. return start;
  157. }
  158. Tree*& findBTree(Tree*& start, int value, int stop) {
  159. int cmp = 0;
  160. if (start->value == stop)
  161. return start;
  162. if (start->value == value)
  163. return start;
  164. else {
  165. if (value < start->value)
  166. start = findBTree(start->left, value, stop);
  167. else start = findBTree(start->right, value, stop);
  168. }
  169. }*/
Advertisement
Add Comment
Please, Sign In to add comment