Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. #include <stdlib.h>
  5.  
  6.  
  7. typedef struct node {
  8. int value;
  9. node* right;
  10. node* left;
  11. } node;
  12. void cleartree(node* root);
  13. void print_tree(node* rootr);
  14. node* add_node(node* rootr, int value);
  15. node* getmin(node* root);
  16. node* getmax(node* root);
  17. node* deletenode(node* root, int value);
  18.  
  19.  
  20. int main()
  21. {
  22. node* rootr = NULL;
  23.  
  24. rootr = add_node(rootr, 45);
  25. rootr = add_node(rootr, 51);
  26. rootr = add_node(rootr, 35);
  27. rootr = add_node(rootr, 23);
  28. rootr = add_node(rootr, 65);
  29. rootr = add_node(rootr, 105);
  30. rootr = add_node(rootr, 57);
  31. rootr = add_node(rootr, 34);
  32. rootr = add_node(rootr, 65);
  33. rootr = add_node(rootr, 45);
  34. deletenode(rootr, 23);
  35. print_tree(rootr);
  36. return 0;
  37. }
  38.  
  39. node* add_node(node* rootr, int value) {
  40. node* new_node = (node*)malloc(sizeof(node));
  41. new_node->value = value;
  42. new_node->left = NULL;
  43. new_node->right = NULL;
  44. if (rootr == NULL) {
  45. return new_node;
  46. }
  47. node* curr = rootr;
  48. while (curr) {
  49. if (curr->value == value) {
  50. free(new_node);
  51. return rootr;
  52. }
  53. if (curr->value < value) {
  54. if (curr->right != NULL) {
  55. curr = curr->right;
  56. continue;
  57. }
  58. else {
  59. curr->right = new_node;
  60. return rootr;
  61. }
  62. }
  63. if (curr->value > value) {
  64. if (curr->left != NULL) {
  65. curr = curr->left;
  66. continue;
  67. }
  68. else {
  69. curr->left = new_node;
  70. return rootr;
  71. }
  72. }
  73. }
  74. return rootr;
  75. }
  76.  
  77. node* deletenode(node* root, int value) {
  78. if (!root) {
  79. return NULL;
  80. }
  81. if (root->value > value) {
  82. root->left = deletenode(root->left, value);
  83. }
  84. if (root->value < value) {
  85. root->right = deletenode(root->right, value);
  86. }
  87. if (root->value == value) {
  88. if (!root->left && !root->right) {
  89. free(root);
  90. return NULL;
  91. }
  92. node* temp = NULL;
  93. if (root->left && !root->right) {
  94. temp = root->left;
  95. free(root);
  96. return temp;
  97. }
  98. if (!root->left && root->right) {
  99. temp = root->right;
  100. free(root);
  101. return temp;
  102. }
  103. if (root->left && root->right) {
  104. int maxleft = getmax(root->left)->value;
  105. int minright = getmin(root->right)->value;
  106. if (root->value - maxleft < minright - root->value) {
  107. deletenode(root, maxleft);
  108. root->value = maxleft;
  109. }
  110. else {
  111. deletenode(root, minright);
  112. root->value = minright;
  113. }
  114. }
  115.  
  116.  
  117. }
  118. return root;
  119. }
  120.  
  121. void print_tree(node* rootr) {
  122. if (rootr->left) {
  123. print_tree(rootr->left);
  124. }
  125. printf("%4d", rootr->value);
  126.  
  127. if (rootr->right) {
  128. print_tree(rootr->right);
  129. }
  130. return;
  131. }
  132.  
  133. void cleartree(node* root) {
  134. if (root) {
  135. if (root->left) {
  136. cleartree(root->left);
  137. }
  138. if (root->right) {
  139. cleartree(root->right);
  140. }
  141. free(root);
  142. }
  143. }
  144.  
  145.  
  146.  
  147.  
  148.  
  149. node* getmin(node* root) {
  150. node* temp = root;
  151. while (temp->left) {
  152. temp = temp->left;
  153. }
  154. return temp;
  155. }
  156. node* getmax(node* root) {
  157. node* temp = root;
  158. while (temp->right) {
  159. temp = temp->right;
  160. }
  161. return temp;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement