Guest User

Untitled

a guest
Oct 20th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. using namespace std;
  5. class BinarySearchTree
  6. {
  7. private:
  8. struct TreeNode
  9. {
  10. int key;
  11. TreeNode* left;
  12. TreeNode* right;
  13. };
  14. TreeNode* root; //root pointer
  15.  
  16. public:
  17. void insert(int value)
  18. {
  19. TreeNode* leaf_node;
  20. TreeNode* t,*curr_node;
  21. t->key = value;
  22. t->right = NULL;
  23. t->left = NULL;
  24.  
  25. if(root == NULL)
  26. {
  27. root = t; //t is root now
  28. }
  29. else
  30. {
  31.  
  32. curr_node = root;
  33.  
  34. while(curr_node != NULL)
  35. {
  36.  
  37. leaf_node = curr_node;
  38. if(value > curr_node ->key)
  39. {
  40. curr_node = curr_node->right;
  41. }
  42. else
  43. {
  44. curr_node = curr_node->left;
  45. }
  46. }
  47. if(value > leaf_node ->key)
  48. {
  49. leaf_node->right = t;
  50. }
  51. else
  52. {
  53. leaf_node->left = t;
  54. }
  55.  
  56. }
  57. }
  58. void remove(int value)
  59. {
  60.  
  61. TreeNode* curr_node,*parent;
  62. if (root == NULL)
  63. {
  64. cout<<"Tree is empty..!"<<endl;
  65. return;
  66. }
  67. //We keep a variable called found
  68. int found = false;
  69. curr_node = root;
  70. while(curr_node != NULL)
  71. {
  72. if(curr_node->key == value)
  73. {
  74. found = true;
  75. break;
  76. }
  77.  
  78. parent = curr_node;
  79. if(value > curr_node->key)
  80. {
  81. curr_node = curr_node->right;
  82. }
  83. else
  84. {
  85. curr_node = curr_node ->left;
  86. }
  87. }
  88. if(!found)
  89. {
  90. cout<<"Value Not Found ..!"<<endl;
  91. return;
  92. }
  93. if(curr_node->right == NULL && curr_node->left == NULL)
  94. {
  95. if(parent->right == curr_node)
  96. {
  97. parent->right = NULL;
  98. delete curr_node;
  99. }
  100. else
  101. {
  102. parent->left = NULL;
  103. delete curr_node;
  104. }
  105. return;
  106. }
  107.  
  108. if(curr_node->right!= NULL && curr_node->left == NULL)
  109. {
  110. if(parent->left == curr_node)
  111. {
  112. parent->left = curr_node->right;
  113. delete curr_node;
  114. }
  115. else
  116. {
  117. parent->right= curr_node->right;
  118. delete curr_node;
  119. }
  120. return;
  121. }
  122. if(curr_node->right== NULL && curr_node->left != NULL)
  123. {
  124. if(parent->left == curr_node)
  125. {
  126. parent->left = curr_node->right;
  127. delete curr_node;
  128. }
  129. else
  130. {
  131. parent->right= curr_node->right;
  132. delete curr_node;
  133. }
  134. return;
  135. }
  136.  
  137. TreeNode* check_node = curr_node->right;
  138. if(check_node->left == NULL)
  139. {
  140.  
  141. curr_node->key = check_node->key;
  142. curr_node->right = check_node->right;
  143. delete check_node;
  144. }
  145. else
  146. {
  147. TreeNode* successor,*parent;
  148. parent = check_node;
  149. successor = check_node->left;
  150. while(successor->left != NULL)
  151. {
  152. parent = successor;
  153. successor = successor->left;
  154. }
  155. curr_node->key = successor->key;
  156. parent->left = successor->right;
  157. delete successor;
  158. }
  159. }
  160. void inorder()
  161. {
  162. //recursive
  163. inorder(root);
  164. }
  165. void inorder(TreeNode* temp)
  166. {
  167. if(temp == NULL) return;
  168. inorder(temp->left);
  169. cout<<temp->key<<" ";
  170. inorder(temp->right);
  171. cout<<temp->right<<" ";
  172. }
  173. };
  174. int main(int argc, char * argv[])
  175. {
  176. //Testing The Code
  177. BinarySearchTree t;
  178. t.insert(8);
  179. t.insert(3);
  180. t.insert(1);
  181. t.insert(5);
  182. t.insert(10);
  183. t.insert(9);
  184. t.insert(12);
  185. t.insert(11);
  186. //t.remove(22);
  187. //t.remove(11);
  188. //t.remove(12);
  189. //t.remove(10);
  190.  
  191. return 0;
  192. }
Add Comment
Please, Sign In to add comment