void free_btree(Btree t) { if ((btree_isempty(t->right)) && (btree_isempty(t->left))){ free(t->key); free(t->value); free(t); } else if (btree_isempty(t->left)){ Btree a; a = t->right; free(t->key); free(t->value); free(t); free_btree(a); } else if (btree_isempty(t->right)){ Btree b; b = t->left; free(t->key); free(t->value); free(t); free_btree(b); } else{ Btree c; Btree d; c = t->left; d = t->right; free(t->key); free(t->value); free(t); free_btree(c); free_btree(d); } }
static void free_btree(SgBTreeNode *n) { if (n != LAST) { free_btree(n->left); free_btree(n->right); sg_free(n); } }
int main() { Btree t = (struct tnode *)malloc(sizeof(struct tnode)); t = btree_empty(); String s = (char *)malloc(50); String a = (char *)malloc(50); String b = (char *)malloc(50); while (scanf("%49s ", s) != EOF){ if (strcmp(s, "insert") == 0){ scanf("%49s ", a); scanf("%49s\n", b); t = btree_insert(a, b, t); } else if (strcmp(s, "delete") == 0){ scanf("%49s\n", a); t = btree_delete(a, t); } else if (strcmp(s, "search") == 0){ scanf("%49s\n", a); if (btree_search(a, t) == NULL) printf("(not found)\n"); else printf("%s\n", (btree_search(a, t))); } else if (strcmp(s, "quit") == 0) break; else{ printf("(unknown command)\n"); } } free_btree(t); free(a); free(b); free(s); return 0; }
int main(int argc, char ** argv) { int i; // do we have verbose output? bool ga_testing = false; if (argc > 1) { for (i = 1; i < argc; ++i) { if (!strcmp(argv[1],"-ga")) { ga_testing = true; break; } } } // initialize btree * tree = create_btree(16); bool flags[MAX_KEY]; for (i = 0; i < MAX_KEY; ++i) flags[i] = false; // get starting time struct timespec start, stop; clock_gettime(CLOCK_REALTIME,&start); // what we're timing for (int n = 0; n < TEST_SIZE; ++n) { // pick a key btree_key_t key = random_key(MAX_KEY); // is the key in the tree? btree_data_t data = btree_find(tree,key); if (data == NULL_DATA) { btree_insert(tree,key,(btree_data_t)key); flags[key] = true; } else { btree_remove(tree,key); flags[key] = false; } } // calculate run time clock_gettime(CLOCK_REALTIME,&stop); double run_time = (stop.tv_sec - start.tv_sec) + (double)(stop.tv_nsec - start.tv_nsec) / 1000000000.0; #if defined(VERIFY) // verify for (btree_key_t k = 0; k < MAX_KEY; ++k) { if (NULL_DATA == btree_find(tree,k)) { if (flags[k]) fprintf(stderr,"VERIFICATION ERROR: %l found, and shouldn't have been\n",k); } else { if (!flags[k]) fprintf(stderr,"VERIFICATION ERROR: %l not found, and should have been\n",k); } } #endif // clean up free_btree(tree); // report runtime if (ga_testing) fprintf(stdout,"%f",run_time); else fprintf(stdout,"\ntreebench (Std. C) run time: %f\n\n",run_time); fflush(stdout); // done return 0; }
void sg_free_btree(SgBTree *h) { free_btree(h->root); sg_free(h); }
void sg_btree_free_subtree(SgBTreeNode *n) { if (n->parent == LAST) free_btree(n); }