예제 #1
0
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);
    }
}
예제 #2
0
/*
 * 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;
}
예제 #3
0
void
delete_trees(struct NHXtree *tree)
{
    if (tree != 0)
    {
        delete_trees(tree->next);
        delete_tree_nodes(tree->root);
        free(tree);
    }
    tree = 0;
}
예제 #4
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;
}