void delete_tree_nodes(struct NHXnode *n) { if (n != 0) { struct NHXnode *left = n->left; struct NHXnode *right = n->right; delete_tree_nodes(left); delete_tree_nodes(right); delete_node(n); } }
/* * Delete all nodes of a tree */ int delete_tree_nodes(tree_p root) { int count = 0; if (!root) { log(ERROR, "root invalid.\n"); return -1; } if (root->left) count += delete_tree_nodes(root->left); if (root->right) count += delete_tree_nodes(root->right); free(root); root = NULL; return ++count; }
void delete_trees(struct NHXtree *tree) { if (tree != 0) { delete_trees(tree->next); delete_tree_nodes(tree->root); free(tree); } tree = 0; }
/* * Destroy a tree */ int destroy_tree(tree_pp head) { int count = 0; if (!head) { log(ERROR, "head invalid.\n"); return -1; } count = delete_tree_nodes(*head); free(head); head = NULL; return count; }