Пример #1
0
void destroy_tree_nodes(node * root) {
  int i;
  if (root->is_leaf)
    for (i = 0; i < root->num_keys; i++)
      free(root->pointers[i]);
  else
    for (i = 0; i < root->num_keys + 1; i++)
      destroy_tree_nodes(root->pointers[i]);
  free(root->pointers);
  free(root->keys);
  free(root);
}
Пример #2
0
void destroy_tree_nodes(node * root, void freeRecord(void *)) {
    int i;
    if (root == NULL) return;
    if (root->is_leaf) {
        for (i = 0; i < root->num_keys; i++) {
            if (freeRecord != NULL) {
                freeRecord(((record*) root->pointers[i])->value);
            }
            free(root->pointers[i]);
        }
    } else {
        for (i = 0; i < root->num_keys + 1; i++) {
            destroy_tree_nodes(root->pointers[i], freeRecord);
        }
    }
    free(root->pointers);
    free(root->keys);
    free(root);
}
Пример #3
0
node * destroy_tree(node * root) {
  destroy_tree_nodes(root);
  return NULL;
}
Пример #4
0
node * destroy_tree(node * root, void freeRecord(void *)) {
    destroy_tree_nodes(root, freeRecord);
    return NULL;
}
Пример #5
0
/**
 * Free the tree using the record specific function
 * 
 * @param root the root node
 * @param freeRecord the record specific function
 * @return NULL;
 */
BtreeNode_t * BTreeFree(BtreeNode_t * root, void freeRecord(void *), void freeKey(void *)) {
    destroy_tree_nodes(root, freeRecord, freeKey);
    return NULL;
}