Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. struct tree
  5. {
  6. int data;
  7. tree* right;
  8. tree* left;
  9. tree* middle;
  10.  
  11. };
  12.  
  13. tree* DeleteNode(tree* node, int val) {
  14. if (node == NULL)
  15. return node;
  16.  
  17. if (val == node->data) {
  18.  
  19. tree* tmp;
  20. if (node->right == NULL)
  21. tmp = node->left;
  22. else {
  23.  
  24. tree* ptr = node->right;
  25. if (ptr->left == NULL) {
  26. ptr->left = node->left;
  27. tmp = ptr;
  28. }
  29. else {
  30.  
  31. tree* pmin = ptr->left;
  32. while (pmin->left != NULL) {
  33. ptr = pmin;
  34. pmin = ptr->left;
  35. }
  36. ptr->left = pmin->right;
  37. pmin->left = node->left;
  38. pmin->right = node->right;
  39. tmp = pmin;
  40. }
  41. }
  42.  
  43. delete node;
  44. return tmp;
  45. }
  46. else if (val < node->data)
  47. node->left = DeleteNode(node->left, val);
  48. else
  49. node->right = DeleteNode(node->right, val);
  50. return node;
  51. }
  52.  
  53.  
  54. void add(int data, tree*& node)
  55. {
  56. if (!node)
  57. {
  58. node = new tree();
  59. node->data = data;
  60. node->right = NULL;
  61. node->left = NULL;
  62. node->middle = NULL;
  63. return;
  64. }
  65.  
  66. if (data < node->data)
  67. {
  68.  
  69. add(data, node->left);
  70. }
  71. else if (data > node->data)
  72. {
  73.  
  74. add(data, node->right);
  75. }
  76. else
  77. {
  78. add(data, node->middle);
  79. }
  80.  
  81. }
  82.  
  83. void print(tree*& node)
  84. {
  85. if (!node)
  86. {
  87. return;
  88. }
  89. print(node->left);
  90. std::cout << node->data << ",";
  91. print(node->middle);
  92. print(node->right);
  93.  
  94. }
  95.  
  96. void print2(tree* node)
  97. {
  98. if (!node)
  99. {
  100. return;
  101. }
  102. std::cout << node->data << ",";
  103. print(node->left);
  104. print(node->middle);
  105. print(node->right);
  106. }
  107.  
  108. void search(tree* node, int key)
  109. {
  110. if (node == NULL) return;
  111. if (key == node->data)
  112. {
  113. std::cout << "node " << node->data << std::endl;
  114. if (node->middle)
  115. {
  116. std::cout << "Middle half of tree" << std::endl;
  117. return;
  118. }
  119. if (node->left)
  120. {
  121. std::cout << "left child " << node->left->data << std::endl;
  122. }
  123. else
  124. std::cout << "Non left child " << std::endl;
  125. if (node->right)
  126. {
  127. std::cout << "right child " << node->right->data << std::endl;
  128. }
  129. else
  130. std::cout << "Non right child " << std::endl;
  131.  
  132. }
  133. search(node->left, key);
  134. search(node->right, key);
  135.  
  136. }
  137.  
  138. void deleting(tree* node)
  139. {
  140. if (node)
  141. {
  142. deleting(node->left);
  143. deleting(node->right);
  144. deleting(node->middle);
  145. delete node;
  146. node = nullptr;
  147. }
  148. }
  149.  
  150.  
  151. void menu()
  152. {
  153. std::cout << std::endl;
  154. std::cout << "1-Add integer" << std::endl;
  155. std::cout << "2-Show tree by 1 variant" << std::endl;
  156. std::cout << "3-Show tree by 2 variant" << std::endl;
  157. std::cout << "4-Delete integer" << std::endl;
  158. std::cout << "5-Delete all tree" << std::endl;
  159. std::cout << "6-search integer" << std::endl;
  160. std::cout << "7-Exit the program" << std::endl;
  161. }
  162.  
  163.  
  164.  
  165. int main()
  166. {
  167. tree* root = NULL;
  168. for (;;)
  169. {
  170. int data;
  171. int m;
  172. menu();
  173. std::cin >> m;
  174. switch (m)
  175. {
  176. case 1:
  177.  
  178.  
  179. std::cout << "Enter integer" << std::endl;
  180. std::cin >> data;
  181. add(data, root);
  182. break;
  183.  
  184. case 2:
  185.  
  186. print(root);
  187. break;
  188. case 3:
  189. print2(root);
  190. break;
  191.  
  192. case 4:
  193.  
  194. std::cout << "What integer do you want to delete" << std::endl;
  195. int z;
  196. std::cin >> z;
  197. DeleteNode(root, z);
  198. break;
  199. case 5:
  200. deleting(root);
  201. std::cout << "tree had been deleted" << std::endl;
  202. break;
  203. case 6:
  204. std::cout << "Enter integer that you want to search" << std::endl;
  205. int l;
  206. std::cin >> l;
  207. search(root, l);
  208. break;
  209.  
  210. case 7:
  211.  
  212. return 0;
  213. }
  214. }
  215.  
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement