summaryrefslogtreecommitdiff
path: root/src/03
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-08-28 13:40:28 -0600
committermo khan <mo.khan@gmail.com>2020-08-28 13:40:28 -0600
commit64d34f33575b0bd3c54e9d5c0ad8eef45cd26287 (patch)
treeb1bc4509b5ea9a99107b0ca28e925cf0162f0004 /src/03
parent5d1b9bb8a14cb7ce2c04ca35163cd9a293f0ded4 (diff)
Perform right left rotation after deletion
Diffstat (limited to 'src/03')
-rw-r--r--src/03/avl_tree_test.c43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/03/avl_tree_test.c b/src/03/avl_tree_test.c
index f27fb5a..662b27b 100644
--- a/src/03/avl_tree_test.c
+++ b/src/03/avl_tree_test.c
@@ -234,7 +234,47 @@ Ensure(delete_handles_right_right_case) {
assert_that(tree->right->right->value, is_equal_to(37));
}
-Ensure(delete_handles_right_left) { }
+Ensure(delete_handles_right_left) {
+/*
+ (z) (x)
+ / \ / \
+ (T4) (y) (z) (y)
+ / \ / \ / \
+ (x) (T1) --> (T4) (T3) (T2) (T1)
+ / \
+ (T3) (T2)
+
+
+ (20) (22)
+ / \ / \
+ (15) (25) (20) (25)
+ / / \ / \ / \
+*(10) (22) (30) --> (15) (21) (23) (30)
+ / \
+ (21) (23)
+*/
+
+ AVLTree *tree = avl_tree_initialize(20);
+ tree = avl_tree_insert(tree, 15);
+ tree = avl_tree_insert(tree, 25);
+ tree = avl_tree_insert(tree, 10);
+ tree = avl_tree_insert(tree, 22);
+ tree = avl_tree_insert(tree, 30);
+ tree = avl_tree_insert(tree, 21);
+ tree = avl_tree_insert(tree, 23);
+
+ tree = avl_tree_delete(tree, 10);
+
+ assert_that(tree, is_not_equal_to(NULL));
+ assert_that(tree->value, is_equal_to(22));
+ assert_that(tree->left->value, is_equal_to(20));
+ assert_that(tree->left->left->value, is_equal_to(15));
+ assert_that(tree->left->right->value, is_equal_to(21));
+
+ assert_that(tree->right->value, is_equal_to(25));
+ assert_that(tree->right->left->value, is_equal_to(23));
+ assert_that(tree->right->right->value, is_equal_to(30));
+}
TestSuite *avl_tree_tests() {
TestSuite *x = create_test_suite();
@@ -253,6 +293,7 @@ TestSuite *avl_tree_tests() {
add_test(x, delete_handles_left_left_case);
add_test(x, delete_handles_left_right_case);
add_test(x, delete_handles_right_right_case);
+ add_test(x, delete_handles_right_left);
return x;
}