Esempio n. 1
0
static void free_node_recursively(struct rbtree * tree, struct rbtree_node * node,
	rbtree_data_free_func free_func)
{
	if(node->left != tree->nil)
		free_node_recursively(tree, node->left, free_func);
	if(node->right != tree->nil)
		free_node_recursively(tree, node->right, free_func);

	if(free_func)
		free_func(node->data);
	if(tree->free_key)
		tree->free_key(node->key);
	free(node);
}
Esempio n. 2
0
void rbtree_free(struct rbtree * tree, rbtree_data_free_func free_func)
{
	if(tree->root != NULL && tree->root != tree->nil)
		free_node_recursively(tree, tree->root, free_func);
	free(tree->nil);
	free(tree);
}