Maxim_Leo

Untitled

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