|
|
@@ -365,10 +365,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);
|