summaryrefslogtreecommitdiff
path: root/src/02/01/binary_tree_test.c
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-07-11 16:54:11 -0600
committermo khan <mo.khan@gmail.com>2020-07-11 16:54:11 -0600
commitb9d31fde299fd7b40f3bcd4aae456a31ea4ce87d (patch)
tree567566b1641bd788e05e106fbed73cdfa443b2c4 /src/02/01/binary_tree_test.c
parentdce786c330bf59eb314e4e310373cfe8d2758835 (diff)
Implement a recursive postorder traversal
Diffstat (limited to 'src/02/01/binary_tree_test.c')
-rw-r--r--src/02/01/binary_tree_test.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/02/01/binary_tree_test.c b/src/02/01/binary_tree_test.c
index f20ecfe..68615e9 100644
--- a/src/02/01/binary_tree_test.c
+++ b/src/02/01/binary_tree_test.c
@@ -85,6 +85,74 @@ Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_multiple_levels
assert_that(visited[4], is_equal_to(300));
}
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_is_empty) {
+ postorder_traversal(NULL, visitor);
+
+ assert_that(visited_count, is_equal_to(0));
+}
+
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_single_node) {
+ Node *node = initialize(100);
+
+ postorder_traversal(node, visitor);
+
+ assert_that(visited_count, is_equal_to(1));
+ assert_that(visited[0], is_equal_to(100));
+}
+
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_left_node) {
+ Node *node = initialize(100);
+ node->left = initialize(200);
+
+ postorder_traversal(node, visitor);
+
+ assert_that(visited_count, is_equal_to(2));
+ assert_that(visited[0], is_equal_to(200));
+ assert_that(visited[1], is_equal_to(100));
+}
+
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_right_node) {
+ Node *node = initialize(100);
+ node->right = initialize(300);
+
+ postorder_traversal(node, visitor);
+
+ assert_that(visited_count, is_equal_to(2));
+ assert_that(visited[0], is_equal_to(300));
+ assert_that(visited[1], is_equal_to(100));
+}
+
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_left_and_right_node) {
+ Node *node = initialize(100);
+ node->left = initialize(200);
+ node->right = initialize(300);
+
+ postorder_traversal(node, visitor);
+
+ assert_that(visited_count, is_equal_to(3));
+ assert_that(visited[0], is_equal_to(200));
+ assert_that(visited[1], is_equal_to(300));
+ assert_that(visited[2], is_equal_to(100));
+}
+
+Ensure(BinaryTree, when_traversing_in_postorder_when_the_tree_has_multiple_levels) {
+ Node *node = initialize(100);
+ node->left = initialize(200);
+ node->right = initialize(300);
+
+ node->left->left = initialize(400);
+ node->left->right = initialize(500);
+
+ postorder_traversal(node, visitor);
+
+ assert_that(visited_count, is_equal_to(5));
+ assert_that(visited[0], is_equal_to(400));
+ assert_that(visited[1], is_equal_to(500));
+ assert_that(visited[2], is_equal_to(200));
+ assert_that(visited[3], is_equal_to(300));
+ assert_that(visited[4], is_equal_to(100));
+}
+
TestSuite *binary_tree_tests() {
TestSuite *suite = create_test_suite();
@@ -92,6 +160,15 @@ TestSuite *binary_tree_tests() {
add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_single_node);
add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_left_node);
add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_right_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_left_and_right_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_multiple_levels);
+
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_is_empty);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_single_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_left_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_right_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_has_a_left_and_right_node);
+ add_test_with_context(suite, BinaryTree, when_traversing_in_postorder_when_the_tree_has_multiple_levels);
return suite;
}