fix(tree): working balanced remove
This commit is contained in:
parent
70217bee21
commit
bee520a781
7 changed files with 102 additions and 18 deletions
|
|
@ -3,6 +3,9 @@
|
|||
#include "vieter_tree_node.h"
|
||||
#include "vieter_tree_balancing.h"
|
||||
|
||||
// This uses the examples from wikipedia
|
||||
// https://en.wikipedia.org/wiki/Tree_rotation
|
||||
|
||||
void test_rotate_right() {
|
||||
vieter_tree_node *a = vieter_tree_node_init();
|
||||
vieter_tree_node *b = vieter_tree_node_init();
|
||||
|
|
@ -24,6 +27,12 @@ void test_rotate_right() {
|
|||
TEST_CHECK(new_root->children[1] == q);
|
||||
TEST_CHECK(new_root->children[1]->children[0] == b);
|
||||
TEST_CHECK(new_root->children[1]->children[1] == c);
|
||||
|
||||
vieter_tree_node_free(a);
|
||||
vieter_tree_node_free(b);
|
||||
vieter_tree_node_free(p);
|
||||
vieter_tree_node_free(c);
|
||||
vieter_tree_node_free(q);
|
||||
}
|
||||
|
||||
void test_rotate_left() {
|
||||
|
|
@ -47,6 +56,12 @@ void test_rotate_left() {
|
|||
TEST_CHECK(new_root->children[1] == c);
|
||||
TEST_CHECK(new_root->children[0]->children[0] == a);
|
||||
TEST_CHECK(new_root->children[0]->children[1] == b);
|
||||
|
||||
vieter_tree_node_free(a);
|
||||
vieter_tree_node_free(b);
|
||||
vieter_tree_node_free(p);
|
||||
vieter_tree_node_free(c);
|
||||
vieter_tree_node_free(q);
|
||||
}
|
||||
|
||||
TEST_LIST = {
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ void test_remove() {
|
|||
|
||||
void *out;
|
||||
|
||||
for (uint64_t i = 0; i < 100; i++) {
|
||||
for (uint64_t i = 0; i < 250; i++) {
|
||||
TEST_CHECK(vieter_tree_search(&out, tree, i) == vieter_tree_ok);
|
||||
TEST_CHECK(vieter_tree_remove(&out, tree, i) == vieter_tree_ok);
|
||||
TEST_CHECK(vieter_tree_validate(tree));
|
||||
|
|
|
|||
Reference in a new issue