void kdtree::recursive_destroy(kdnode * node) { if (node->get_right() != nullptr) { recursive_destroy(node->get_right()); } if (node->get_left() != nullptr) { recursive_destroy(node->get_left()); } delete node; node = nullptr; }
// Recursively destroys the radix tree static void recursive_destroy(radix_node *n) { radix_node *child; if (n->edges[0]) { radix_leaf *leaf = n->edges[0]; free(leaf->key); free(leaf); } for (int i=1; i < 256; i++) { child = (radix_node*)n->edges[i]; if (!child) continue; recursive_destroy(child); free(child); } }
kdtree::~kdtree(void) { if (root != nullptr) { recursive_destroy(root); } }
/** * Destroys the tree * @arg tree The tree to destroy * @return 0 on success */ int radix_destroy(radix_tree *tree) { recursive_destroy(&tree->root); return 0; }