Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void erase(iterator iter) {
- auto it = iter.get_pointer();
- if (it == nullptr) {
- throw std::invalid_argument("no element");
- }
- if (it->left == nullptr && it->right == nullptr) {
- if (it->parent->left == it) {
- it->parent->left = nullptr;
- }
- if(it->parent->right == it) {
- it->parent->right = nullptr;
- }
- Node<T>* temp = it;
- it = nullptr;
- delete temp;
- --size_;
- return;
- }
- if (it->left == nullptr && it->right!=nullptr) {
- if (it->parent->left == it) {
- it->parent->left = it->right;
- it->right->parent = it->parent;
- }
- else if (it->parent->right == it) {
- it->parent->right = it->right;
- it->right->parent = it->parent;
- }
- Node<T>* temp = it;
- it = nullptr;
- delete temp;
- --size_;
- return;
- }
- if (it->left != nullptr && it->right == nullptr) {
- if (it->parent->left == it) {
- it->parent->left = it->left;
- it->left->parent = it->parent;
- }
- else if (it->parent->right == it) {
- it->parent->right = it->left;
- it->left->parent = it->parent;
- }
- Node<T>* temp = it;
- it = nullptr;
- delete temp;
- --size_;
- return;
- }
- if (it->left != nullptr && it->right != nullptr) {
- Node<T>* min=(++iter).get_pointer();
- it->value = min->value;
- erase(iterator(min));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement