Advertisement
illfate

Untitled

May 12th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. void erase(iterator iter) {
  2. auto it = iter.get_pointer();
  3. if (it == nullptr) {
  4. throw std::invalid_argument("no element");
  5. }
  6. if (it->left == nullptr && it->right == nullptr) {
  7. if (it->parent->left == it) {
  8. it->parent->left = nullptr;
  9. }
  10. if(it->parent->right == it) {
  11. it->parent->right = nullptr;
  12. }
  13. Node<T>* temp = it;
  14. it = nullptr;
  15. delete temp;
  16. --size_;
  17. return;
  18. }
  19. if (it->left == nullptr && it->right!=nullptr) {
  20. if (it->parent->left == it) {
  21. it->parent->left = it->right;
  22. it->right->parent = it->parent;
  23. }
  24. else if (it->parent->right == it) {
  25. it->parent->right = it->right;
  26. it->right->parent = it->parent;
  27. }
  28. Node<T>* temp = it;
  29. it = nullptr;
  30. delete temp;
  31. --size_;
  32. return;
  33. }
  34. if (it->left != nullptr && it->right == nullptr) {
  35. if (it->parent->left == it) {
  36. it->parent->left = it->left;
  37. it->left->parent = it->parent;
  38. }
  39. else if (it->parent->right == it) {
  40. it->parent->right = it->left;
  41. it->left->parent = it->parent;
  42. }
  43. Node<T>* temp = it;
  44. it = nullptr;
  45. delete temp;
  46. --size_;
  47. return;
  48. }
  49. if (it->left != nullptr && it->right != nullptr) {
  50. Node<T>* min=(++iter).get_pointer();
  51. it->value = min->value;
  52. erase(iterator(min));
  53.  
  54. }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement