void DeleteTrieNode(TrieNode * todelete) { BinaryTreeEnum * btenum; TrieNode * curchild; btenum=BT_newenum(todelete->children); while(curchild=(TrieNode *)BT_next(btenum)) DeleteTrieNode(curchild); BT_delete(todelete->children); clean(todelete); return; }
main() { int pool[POOLSIZE]; int pool2[POOLSIZE]; int i,j,k,n,loop,outer; void *btree = BT_new(mycomp); struct timeval start,stop; double d; for(outer=0; 1 ; outer++) { for(i=0; i<POOLSIZE; i++) { pool[i]=i; } for(i=0; i<MIX; i++) { j= rand()%POOLSIZE; k= rand()%POOLSIZE; n = pool[j]; pool[j] = pool[k]; pool[k] = n; } printf("TREE %d\n",outer); gettimeofday(&start,NULL); for(i=0; i<POOLSIZE; i++) { BT_store(btree,pool+i); } gettimeofday(&stop,NULL); d = (double)(stop.tv_sec-start.tv_sec)+(double)(stop.tv_usec-start.tv_usec)/1000000.; printf("%d elements added in %lf seconds\n",BT_numentries(btree),d); printf(" = %lf per second\n",(double)BT_numentries(btree)/d); BT_verify(btree); printf("deleting/adding %d elements\n",POOL2SIZE); /* Put together a list of nodes to delete, then add back in */ for(i=0; i<POOLSIZE; i++) { pool2[i]=i; } for(loop = 0; loop < LOOP2; loop++) { printf("*"); fflush(stdout); for(i=0; i<MIX; i++) { j= rand()%POOL2SIZE; k= rand()%POOLSIZE; n = pool2[j]; pool2[j] = pool2[k]; pool2[k] = n; } gettimeofday(&start,NULL); for(i=0; i<POOL2SIZE; i++) { BT_delete(btree,pool+pool2[i]); } gettimeofday(&stop,NULL); d = (double)(stop.tv_sec-start.tv_sec)+(double)(stop.tv_usec-start.tv_usec)/1000000.; printf("%d elements deleted in %lf seconds\n",POOL2SIZE,d); printf(" = %lf per second\n",(double)POOL2SIZE/d); if(BT_verify(btree) == -1) exit(0); gettimeofday(&start,NULL); for(i=0; i<POOL2SIZE; i++) { BT_store(btree,pool+pool2[i]); } gettimeofday(&stop,NULL); d = (double)(stop.tv_sec-start.tv_sec)+(double)(stop.tv_usec-start.tv_usec)/1000000.; printf("%d elements restored in %lf seconds\n",POOL2SIZE,d); printf(" = %lf per second\n",(double)POOL2SIZE/d); if(BT_verify(btree) == -1) exit(0); } printf(" %d\n",BT_numentries(btree)); BT_flush(btree); } printf("The tree holds %d entries\n",BT_numentries(btree)); }