diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/03/avl_tree.c | 6 | ||||
| -rw-r--r-- | src/03/avl_tree_test.c | 2 |
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() { |
