diff --git a/Start_Windows/bintree.c b/Start_Windows/bintree.c index b2230e1..5a21a80 100644 --- a/Start_Windows/bintree.c +++ b/Start_Windows/bintree.c @@ -96,7 +96,19 @@ void *nextTreeData(TreeNode *root) // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { + if (root == NULL) { + return; + } + clearTree(root->left); + clearTree(root->right); + + if (root->data != NULL) { + free(root->data); + root->data = NULL; + } + + free(root); } // Returns the number of entries in the tree given by root. diff --git a/Start_Windows/bintree.o b/Start_Windows/bintree.o index 2b6e015..30aaf7b 100644 Binary files a/Start_Windows/bintree.o and b/Start_Windows/bintree.o differ diff --git a/Start_Windows/bintreeTests.c b/Start_Windows/bintreeTests.c index d779d3a..35febed 100644 --- a/Start_Windows/bintreeTests.c +++ b/Start_Windows/bintreeTests.c @@ -73,6 +73,23 @@ static void testNextTreeDataInorderTraversal(){ } +static void testClearTree() { + TreeNode *root = NULL; + int values[] = {10, 5, 15}; + int i; + + for(i = 0; i < 3; i++) { + root = addToTree(root, &values[i], sizeof(int), compareInt, NULL); + } + + TEST_ASSERT_NOT_NULL(root); + + clearTree(root); + root = NULL; + + TEST_ASSERT_NULL(root); +} + void setUp(void){ } @@ -89,6 +106,8 @@ int main(){ RUN_TEST(testAddToTreeNewRoot); RUN_TEST(testAddToTreeToExistingRoot); RUN_TEST(testAddToTreeNoData); + RUN_TEST(testNextTreeDataInorderTraversal); + RUN_TEST(testClearTree); return UNITY_END(); } \ No newline at end of file diff --git a/Start_Windows/runBintreeTests.exe b/Start_Windows/runBintreeTests.exe index 2a470c3..d309283 100644 Binary files a/Start_Windows/runBintreeTests.exe and b/Start_Windows/runBintreeTests.exe differ