summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-09-20 16:57:19 -0600
committermo khan <mo.khan@gmail.com>2020-09-20 16:57:19 -0600
commit383ee261a94506ae3e6316e07598fc91be26d862 (patch)
tree2cbcc91bbeee9668562c45e8fc2cc089f9dd5aaa /src
parentd166f3369dd347367d0d4263e3045a1347493250 (diff)
fix: assign rb tree parent when converting from avl tree
Diffstat (limited to 'src')
-rw-r--r--src/03/avl_tree.c6
-rw-r--r--src/03/avl_tree_test.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/src/03/avl_tree.c b/src/03/avl_tree.c
index 3929f1e..9b5e23f 100644
--- a/src/03/avl_tree.c
+++ b/src/03/avl_tree.c
@@ -194,8 +194,14 @@ RBTree *_avl_tree_to_rb_tree(AVLTree *tree, AVLTree *parent) {
enum Colour colour = (parent && is_even(parent->height) && is_odd(tree->height)) ? red : black;
RBTree *rb_tree = rb_tree_initialize_with(tree->value, colour);
+
rb_tree->left = _avl_tree_to_rb_tree(tree->left, tree);
+ if (rb_tree->left)
+ rb_tree->left->parent = rb_tree;
+
rb_tree->right = _avl_tree_to_rb_tree(tree->right, tree);
+ if (rb_tree->right)
+ rb_tree->right->parent = rb_tree;
return rb_tree;
}
diff --git a/src/03/avl_tree_test.c b/src/03/avl_tree_test.c
index e71e178..56e412b 100644
--- a/src/03/avl_tree_test.c
+++ b/src/03/avl_tree_test.c
@@ -342,6 +342,8 @@ Ensure(to_rb_tree_handles_trees_with_a_large_depth) {
RBTree *actual = avl_tree_to_rb_tree(subject);
assert_that(rb_equals(expected, actual), is_equal_to(true));
+ assert_that(rb_tree_is_valid(actual), is_equal_to(true));
+ assert_that(rb_tree_is_valid(expected), is_equal_to(true));
}
TestSuite *avl_tree_tests() {