Exemplo n.º 1
0
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);
  }
}
Exemplo n.º 2
0
static void free_btree(SgBTreeNode *n)
{
    if (n != LAST) {
        free_btree(n->left);
        free_btree(n->right);
        sg_free(n);
    }
}
Exemplo n.º 3
0
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;

}
Exemplo n.º 4
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;
}
Exemplo n.º 5
0
void sg_free_btree(SgBTree *h)
{
    free_btree(h->root);
    sg_free(h);
}
Exemplo n.º 6
0
void sg_btree_free_subtree(SgBTreeNode *n)
{
    if (n->parent == LAST)
        free_btree(n);
}