Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. bool BSTree::remove(int num){
  2. if(root == NULL){
  3. return false;
  4. }
  5. if(root->value == num){
  6. if(root->left == NULL && root->right == NULL){
  7. delete root;
  8. this->root = NULL;
  9. return true;
  10. }
  11. return leafDoubleBranch(root);
  12. //return true;
  13. }
  14. return removeLoop(root, num);
  15.  
  16. }
  17. bool BSTree::removeLoop(Node * n, int val){
  18. if(n->value == val){
  19. return leafDoubleBranch(n);
  20. }
  21. if(n->value > val){
  22. if(n->left == NULL){
  23. return false;
  24. } else {
  25. return removeLoop(n->left, val);
  26. }
  27. }
  28. if(n->value < val){
  29. if(n->right == NULL){
  30. return false;
  31. } else {
  32. return removeLoop(n->right, val);
  33. }
  34. }
  35. return false;
  36. }
  37. bool BSTree::leafDoubleBranch(Node * n){
  38. Node * temp;
  39. temp = n;
  40. if(temp->left){
  41. temp = temp->left;
  42. while(temp->right){
  43. temp = temp->right;
  44. }
  45. if(temp == temp->parent->left){
  46. temp->parent->left = NULL;
  47. } else {
  48. temp->parent->right = NULL;
  49. }
  50. if(temp->left){
  51. temp->left->parent = temp->parent;
  52. temp->left->parent->left = temp->left;
  53. }
  54. n->value = temp->value;
  55. delete temp;
  56. return true;
  57. } else if (temp->right){
  58. temp = temp->right;
  59. while(temp->left){
  60. temp = temp->left;
  61. }
  62. if(temp == temp->parent->left){
  63. temp->parent->left = NULL;
  64. } else {
  65. temp->parent->right = NULL;
  66. }
  67. if(temp->right){
  68. temp->right->parent = temp->parent;
  69. temp->right->parent->right = temp->right;
  70. }
  71. n->value = temp->value;
  72. delete temp;
  73. return true;
  74. } else {
  75. //its a leaf
  76. if(n->left == NULL && n->right == NULL){
  77. //no children
  78. if(n->value < n->parent->value){
  79. //left leaf
  80. n->parent->left = NULL;
  81. } else {
  82. //right leaf
  83. n->parent->right = NULL;
  84. }
  85. delete n;
  86. return true;
  87. }
  88. return false;
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement