From 383ee261a94506ae3e6316e07598fc91be26d862 Mon Sep 17 00:00:00 2001 From: mo khan Date: Sun, 20 Sep 2020 16:57:19 -0600 Subject: fix: assign rb tree parent when converting from avl tree --- src/03/avl_tree.c | 6 ++++++ src/03/avl_tree_test.c | 2 ++ 2 files changed, 8 insertions(+) (limited to 'src') 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() { -- cgit v1.2.3