diff tree6/tree.c tree7/tree.c 3c3 < * (version 6: introduce function pointer) --- > * (version 7: add tree_delete) 37c37 < static void tree_print_helper(tree_t *tree, treenode_t *node, int depth, --- > static void tree_print_helper(tree_t *tree, treenode_t *node, int depth, 39a40,41 > static void tree_delete_helper(tree_t *tree, treenode_t *node, > void (*itemdelete)(void *data) ); 184a187,219 > /**************** tree_delete() ****************/ > void > tree_delete(tree_t *tree, void (*itemdelete)(void *data) ) > { > if (tree != NULL) { > tree_delete_helper(tree, tree->root, itemdelete); > } > free(tree); > } > > /**************** tree_delete_helper() ****************/ > /* Recursive function to delete nodes of the tree. > */ > static void // not visible outside this file > tree_delete_helper(tree_t *tree, treenode_t *node, > void (*itemdelete)(void *data) ) > { > if (node != NULL) { > // delete the left subtree > tree_delete_helper(tree, node->left, itemdelete); > > // delete the right subtree > tree_delete_helper(tree, node->right, itemdelete); > > // delete the current node > if (itemdelete != NULL) { // but first... > (*itemdelete)(node->data); // delete its contents > } > free(node->key); > free(node); > } > return; > } diff tree6/tree.h tree7/tree.h 3c3 < * (version 6: introduce function pointer) --- > * (version 7) 35a36,40 > /* Delete the whole tree, recursively. > * Provide a function that will delete an item. > */ > void tree_delete(tree_t *tree, void (*itemdelete)(void *data) ); > diff tree6/treetest.c tree7/treetest.c 46a47,50 > > printf("\ndelete the tree..."); > tree_delete(tree, NULL); > printf("done\n");