diff --git a/Include/Fledasty/Trees/BinarySearchTree.h b/Include/Fledasty/Trees/BinarySearchTree.h index c7520de..1cf5410 100644 --- a/Include/Fledasty/Trees/BinarySearchTree.h +++ b/Include/Fledasty/Trees/BinarySearchTree.h @@ -185,11 +185,13 @@ FledastyError fledasty_binary_search_tree_##name##_remove(FledastyBinarySearchTr replacement_node = replacement_node->right; \ } \ \ - replacement_node->left = current_node->left; \ - if (current_node->left != NULL) { \ - current_node->left->parent = replacement_node; \ + if (replacement_node->parent->right == replacement_node) { \ + replacement_node->parent->right = replacement_node->left; \ } \ \ + replacement_node->left = current_node->left; \ + current_node->left->parent = replacement_node; \ + \ replacement_node->right = current_node->right; \ if (current_node->right != NULL) { \ current_node->right->parent = replacement_node; \ @@ -197,11 +199,6 @@ FledastyError fledasty_binary_search_tree_##name##_remove(FledastyBinarySearchTr } \ \ if (replacement_node != NULL) { \ - if (replacement_node->parent->right == replacement_node) { \ - replacement_node->parent->right = NULL; \ - } else { \ - replacement_node->parent->left = NULL; \ - } \ replacement_node->parent = current_node->parent; \ } \ \ diff --git a/Tests/Main.c b/Tests/Main.c index a1f9cd1..71edb9c 100644 --- a/Tests/Main.c +++ b/Tests/Main.c @@ -340,7 +340,7 @@ int main() { hallocy_free(in_order_result); - fledasty_binary_search_tree_int_int_remove(&test_search_tree, 3); + fledasty_binary_search_tree_int_int_remove(&test_search_tree, 5); fledasty_binary_search_tree_int_int_in_order_traversal(&test_search_tree, &in_order_result); for (int i = 0; i < test_search_tree.size; i += 1) { printf("In order (After Remove): %d\n", in_order_result[i]->key);