Advertisement
Vladislav_Bezruk

Untitled

Oct 26th, 2021
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct node {
  6. string number;
  7. string surname;
  8. node* left, * right;
  9. };
  10.  
  11. struct node* add(string num, string name, node*& MyTree) //Фукция добавления звена в дерево
  12. {
  13. if (MyTree == NULL) {
  14. MyTree = new node;
  15. MyTree->surname = name;
  16. MyTree->number = num;
  17. MyTree->left = MyTree->right = NULL;
  18. }
  19. else if (name < MyTree->surname)
  20. MyTree->left = add(num, name, MyTree->left);
  21. else
  22. MyTree->right = add(num, name, MyTree->right);
  23. return MyTree;
  24. }
  25.  
  26. struct node* find(node*& Tree, string name) {
  27.  
  28. if (Tree != NULL)
  29. {
  30. if (name == Tree->surname) {
  31. return Tree;
  32. }
  33. if (name < Tree->surname) {
  34. find(Tree->left, name);
  35. }
  36. if (name > Tree->surname) {
  37. find(Tree->right, name);
  38. }
  39. }
  40. else {
  41. return NULL;
  42. }
  43. }
  44.  
  45. node* SearchMin(node* root) {
  46. if (root->left) {
  47. return SearchMin(root->left);
  48. }
  49. return root;
  50. }
  51.  
  52. struct node* del(node*& Tree) {
  53. if (Tree != NULL)
  54. {
  55. del(Tree->left); //Рекурсивная функция прохода по левому поддереву
  56. del(Tree->right); //Рекурсивная функци для прохода по правому поддереву
  57. delete Tree;
  58. Tree = NULL;
  59. }
  60. cout << "Tree was deleted";
  61. return Tree;
  62. }
  63.  
  64. node* Delete(string aName, node* root) {
  65. if (root == NULL) {
  66. cout << "This name isn`t in list" << endl;
  67. return root;
  68. }
  69. if (root->surname == aName) {
  70. if (root->left && root->right) {
  71. node* min = SearchMin(root->right);
  72. root->surname = min->surname;
  73. root->number = min->number;
  74. root->right = Delete(min->surname, root->right);
  75. return root;
  76. }
  77. if (root->left) {
  78. root->surname = root->left->surname;
  79. root->number = root->left->number;
  80. root->left = Delete(root->left->surname, root->left);
  81. return root;
  82. }
  83. if (root->right) {
  84. root->surname = root->right->surname;
  85. root->number = root->right->number;
  86. root->right = Delete(root->right->surname, root->right);
  87. return root;
  88. }
  89. root = NULL;
  90. return root;
  91. }
  92. if (root->surname > aName) {
  93. root->right = Delete(aName, root->right);
  94. }
  95. else {
  96. root->left = Delete(aName, root->left);
  97. }
  98. return root;
  99. }
  100.  
  101. void show(node*& Tree)
  102. {
  103. if (Tree != NULL)
  104. {
  105. show(Tree->left);
  106. cout << "Surname : " << Tree->surname << ", number : +380" << Tree->number << endl;
  107. show(Tree->right);
  108. }
  109. }
  110.  
  111. int main()
  112. {
  113. node* Tree = NULL;
  114. node* Temp_tree = NULL;
  115. int temp;
  116. string temp_number;
  117. string surname;
  118.  
  119. bool program = true;
  120. while (program) {
  121.  
  122. cout << "----------------------------------------------------" << endl;
  123. cout << "0 - enter new contact\n1 - show all contacts\n2 - find contact\n3 - delete contact\n4 - end program" << endl;
  124. cin >> temp;
  125. switch (temp) {
  126.  
  127. case 0:
  128. cout << "Enter number +380";
  129. cin >> temp_number;
  130. cout << "Enter surname ";
  131. cin >> surname;
  132.  
  133. Tree = add(temp_number, surname, Tree);
  134. break;
  135. case 1:
  136. if (Tree == NULL) {
  137. cout << "\nThe phonebook is empty\n";
  138. }
  139. if (Tree != NULL) {
  140. show(Tree);
  141. }
  142. break;
  143. case 2:
  144. cout << " Enter finding surname :";
  145. cin >> surname;
  146. Temp_tree = find(Tree, surname);
  147.  
  148. if (Temp_tree) {
  149. cout << "Surname:" << Temp_tree->surname << endl << "Number: +380" << Temp_tree->number << endl;
  150. }
  151. else {
  152. cout << "Contact doesn`t find!" << endl;
  153. }
  154. break;
  155. case 3:
  156. cout << " Enter the surname of contact what you want to delete: ";
  157. cin >> surname;
  158. Tree = Delete(surname, Tree);
  159. cout << "Contact was deeleted!" << endl;
  160. break;
  161. case 4:
  162. Tree = del(Tree);
  163. program = false;
  164. break;
  165. default:
  166. break;
  167. }
  168.  
  169. }
  170.  
  171. del(Tree);
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement