Commit 383ee26

mo khan <mo.khan@gmail.com>
2020-09-20 22:57:19
fix: assign rb tree parent when converting from avl tree
1 parent d166f33
Changed files (2)
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;
 }
 
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() {