unsigned count;
};
-/* Lookup leaf prototype */
+/* Lookup leaf function prototype */
struct leaf *lookupLeaf(void **, const char *, unsigned);
+/* Freeing node function prototype */
+void freeTree(void *, unsigned);
+
/* Main function */
int main(int argc, char **argv) {
/* Read until end of file */
} while (ret != 0);
+ /* Free tree */
+ freeTree(tree, 0);
+
/* Close file */
if (close(fd) == -1) {
perror("Close failed");
exit(EXIT_SUCCESS);
}
+/* Recursive freeing of node function */
+void freeTree(void *base, unsigned index) {
+ void *current = base, *next;
+ if (base != NULL) {
+ /* Branch level */
+ if (index < 8) {
+ /* Free horizontaly */
+ do {
+ /* Free children */
+ if (((struct branch *)current)->child != NULL) {
+ freeTree(((struct branch *)current)->child, index + 1);
+ }
+ /* Free current and switch to next */
+ next = ((struct branch *)current)->next;
+ free(current);
+ current = next;
+ } while (current != NULL);
+ /* Leaf level */
+ } else {
+ /* Free horizontaly */
+ do {
+ /* Free current and switch to next */
+ next = ((struct leaf *)current)->next;
+ free(current);
+ current = next;
+ } while (current != NULL);
+ }
+ }
+}
+
/* Recursive lookup and populate tree function */
struct leaf *lookupLeaf(void **base, const char *key, unsigned index) {
/* Return leaf */