|
|
@@ -285,7 +285,7 @@ bool AVLCommands::Delete(int key) {
|
|
|
parent->ReplaceChild(currentNode, currentNode->left_);
|
|
|
size_--; assert(size_ >= 0);
|
|
|
} else {
|
|
|
- currentNode->key_ = DeleteMin(currentNode);
|
|
|
+ currentNode->key_ = DeleteMin(currentNode->right_);
|
|
|
}
|
|
|
}
|
|
|
currentNode = (key < currentNode->key_) ?
|
|
|
@@ -364,10 +364,19 @@ int AVLCommands::DeleteMin(std::shared_ptr<BSTNode> currentNode) {
|
|
|
} else {
|
|
|
// lastNode under the root
|
|
|
if (lastNode->right_ != nullptr) {
|
|
|
- parent->left_ = lastNode->right_;
|
|
|
- lastNode->right_->parent_ = parent;
|
|
|
+ if (parent->left_ == lastNode){
|
|
|
+ parent->left_ = lastNode->right_;
|
|
|
+ lastNode->right_->parent_ = parent;
|
|
|
+ } else {
|
|
|
+ parent->right_ = lastNode->right_;
|
|
|
+ lastNode->right_->parent_ = parent;
|
|
|
+ }
|
|
|
} else {
|
|
|
- parent->left_ = nullptr;
|
|
|
+ if (parent->left_ == lastNode){
|
|
|
+ parent->left_ = nullptr;
|
|
|
+ } else {
|
|
|
+ parent->right_ = nullptr;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
size_--; assert(size_ >= 0);
|