void tree_dispose(struct node *node) //@ requires tree(node, root, _); //@ ensures emp; { //@ open tree(node, root, _); //@ open context(node, _, _, root); dispose_node(node); }
void dispose_node(struct node *node) //@ requires subtree(node, _, _); //@ ensures emp; { //@ open subtree(node, _, _); if (node == 0) { } else { { struct node *left = node->left; dispose_node(left); } { struct node *right = node->right; dispose_node(right); } free(node); } }
void dispose_node(trie_node *&t) { if (t != nullptr) { for (auto &n: t->children) { if (n != nullptr) { dispose_node(n); } } delete t; t = nullptr; } }
void dispose_node(b_tree_node *n) { if (n != nullptr) { b_tree_cell *p = n->header; b_tree_cell *q; while (p != nullptr) { q = p; if (p->child) { dispose_node(p->child); } p = p->next; delete q; } delete n; } }
void dispose() { dispose_node(root); }