Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void deleteKey(Node* toDelete)
- {
- Node *x, *y;
- // спусков влево-вправо
- if (toDelete == NULL)
- {
- return;
- }
- if (toDelete->left_ == NULL || toDelete->right_ == NULL)
- {
- // Хотя бы одно из поддеревьев отсутствует
- y = toDelete;
- }
- else
- {
- // Есть оба поддерева
- y = toDelete->right_;
- while (y->left_ != NULL) y = y->left_;
- }
- // Обрабатываем случай, когда у узла "y" только один потомок
- if (y->left_ != NULL)
- {
- x = y->left_;
- }
- else
- {
- x = y->right_;
- }
- // Исключаем узел "y" из "родительской" цепочки
- if (x != NULL) x->p_ = y->p_;
- if (y->p_ != NULL)
- {
- if (y == y->p_->left_)
- {
- y->p_->left_ = x;
- }
- else
- {
- y->p_->right_ = x;
- }
- }
- else root_ = x;
- if (y != toDelete)
- {
- toDelete->key_ = y->key_;
- }
- delete y;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement