void *btree_destroy(tnode *t) { if(t == NULL){ }else{ btree_destroy(t->left); btree_destroy(t->right); free(t->key); free(t->value); free(t); } return; }
void btree_test() { struct btree *node1 = btree_create(NULL, TYPE_INT, 1); struct btree *node2 = btree_create(NULL, TYPE_INT, 2); struct btree *node3 = btree_create(NULL, TYPE_INT, 3); struct btree *node4 = btree_create(NULL, TYPE_INT, 4); struct btree *node5 = btree_create(NULL, TYPE_INT, 5); struct btree *node6 = btree_create(NULL, TYPE_INT, 6); struct btree *node7 = btree_create(NULL, TYPE_INT, 7); struct btree *node8 = btree_create(NULL, TYPE_INT, 8); node1->left = node2; node1->right = node3; node2->left = node4; node2->right = node5; node3->left = node6; node3->right = node7; node4->left = node8; fprintf(stdout, "preorder:\n"); btree_preorder(node1); fprintf(stdout, "postorder:\n"); btree_postorder(node1); fprintf(stdout, "inorder:\n"); btree_inorder(node1); fprintf(stdout, "btree_search(node5, node8) = %d\n", btree_search(node5, node8)); fprintf(stdout, "btree_search(node4, node8) = %d\n", btree_search(node4, node8)); btree_destroy(node1); }
char *test_close() { btree_destroy(s, root); store_close(s); return NULL; }
void bstree_destroy(struct bstree_node *node) { if (node != NULL) { btree_destroy(node->root); free(node); } }
extern void btree_destroy(p_btree_t tree) { #if TREE_ARG_CHECK == 1 if (NULL == tree) { errno = EINVAL; return; } #endif if (tree->lchild != NULL) { btree_destroy(tree->lchild); } if (tree->rchild != NULL) { btree_destroy(tree->rchild); } }
void free_bmaps(xfs_mount_t *mp) { xfs_agnumber_t i; for (i = 0; i < mp->m_sb.sb_agcount; i++) btree_destroy(ag_bmap[i]); free(ag_bmap); ag_bmap = NULL; free_rt_bmap(mp); }
TEST(BTree, Insert) { struct btree_s tree; btree_init(&tree, 3); int i; for (i = 0; i < 10; i++) { btree_insert(&tree, i); } btree_dump(&tree); btree_destroy(&tree); }
void test_btree() { // int array[10] = {10,11,12,9,6,5,4,3,2,1}; int array[10] = {10,9,8,7,6,5,4,3,2,1}; btnode_t* root; root = btree_init(array, 10); if (root == NULL) { printf("btree init fail\n"); } printf("start preorer...\n"); btree_preorder(root); printf("\nstart destroy btree..\n"); btree_destroy(root); }
int main() { btree_t *b; uint32_t i, *x; uint32_t v[] = {15, 5, 16, 3, 12, 20, 10, 13, 18, 23, 6, 7}; uint32_t nv = sizeof(v) / sizeof(v[0]); btree_create(&b); for(i = 0; i < nv; i++) { x = (uint32_t*)xmalloc(sizeof(uint32_t)); *x = (uint32_t)random(); if (btree_add(b, v[i], (void*)x) != TRUE) { printf("Fail Add %lu %lu\n", v[i], *x); } } printf("depth %d\n", btree_depth(b->root)); btree_dump(b); sleep(3); btree_remove(b, 5, (void*)&x); btree_dump(b); sleep(3); btree_remove(b, 16, (void*)&x); btree_dump(b); sleep(3); btree_remove(b, 13, (void*)&x); btree_dump(b); while (btree_get_root_key(b, &i)) { if (btree_remove(b, i, (void*)&x) == FALSE) { fprintf(stderr, "Failed to remove %lu\n", i); } btree_dump(b); sleep(1); } if (btree_destroy(&b) == FALSE) { printf("Failed to destroy \n"); } return 0; }
TEST(BTree, RemoveALot) { struct btree_s tree; btree_init(&tree, 3); int i; for (i = 0; i < 1000000; i++) { btree_insert(&tree, i); } for (i = 10; i < 999992; i++) { btree_remove(&tree, i); } btree_dump(&tree); btree_destroy(&tree); }
int main(){ char command[100]; char word[100]; char tango[100]; tnode *tree = NULL; tnode *temp = NULL; while(1){ scanf("%s", command); if(strcmp(command, "insert") == 0){ scanf("%s %s", word, tango); temp = btree_insert(word, tango, tree); if(tree == NULL){ tree = temp; } }else if(strcmp(command, "delete") == 0){ scanf("%s", word); temp = btree_delete(word, tree); if(temp == tree->left){ tree = tree->left; }else if(temp == tree->right){ tree = tree->right; } }else if(strcmp(command, "search") == 0){ scanf("%s", word); temp = btree_search(word, tree); if(temp == NULL){ printf("(not found)\n"); }else{ printf("%s\n", temp->value); } }else if(strcmp(command, "quit") == 0){ break; }else{ printf("ERROR\n"); } } btree_destroy(tree); return 0; }
TEST(BTree, RemoveALot1) { struct btree_s tree; btree_init(&tree, 3); int i; srand(time(0)); for (i = 0; i < 100000; i++) { btree_insert(&tree, i); } btree_check(tree.root); for (i = 0; i < 99992; i += (rand() % 3 + 1) ) { btree_remove(&tree, i); } btree_destroy(&tree); }
int main(int argc, char **argv) { BTree *tree = btree_create(int_compare); int n = atoi(argv[1]); int a[n]; //int a[] = {1, 3, 2, 5, -1, 19, 15, 45, 9, 6, -4}; n = sizeof(a) / sizeof(a[0]); //n = 3; for (int i = 0; i < n; ++i) { //a[i] = i + 1; a[i] = rand() % 1000; btree_insert(tree, (void*)&a[i]); } for (int i = 0; i < n / 2; ++i) { btree_remove(btree_find(tree, &a[i])); } int expected_height = 2 * ceil(log(n + 1) / log(2)) + 1; btree_dump_dot(tree, node_attrs); btree_destroy(tree); }
int pdb_destroy(pdb_t **pp) { pdb_t *p = *pp; uint32_t id; while(pdb_get_first_id(p, &id)) { if (pdb_item_destroy(p, id) == FALSE) { debug_msg("Failed to destroy item\n"); return FALSE; } } if (btree_destroy(&p->db) == FALSE) { debug_msg("Failed to destroy tree\n"); return FALSE; } xfree(p); *pp = NULL; return TRUE; }
TEST(BTree, Remove) { struct btree_s tree; btree_init(&tree, 3); int i; for (i = 0; i < 10; i++) { btree_insert(&tree, i); } btree_dump(&tree); btree_remove(&tree, 5); btree_dump(&tree); btree_remove(&tree, 9); btree_dump(&tree); btree_remove(&tree, 8); btree_dump(&tree); btree_destroy(&tree); }
int main_btree(int argc, char** argv) { btree_t *btree_p = btree_init(string_destroy, NULL); printf("%u\n", btree_size(btree_p)); char *word = malloc(strlen("hello") + 1); strcpy(word, "hello"); btree_node_t *root_node_p = NULL; root_node_p = btree_ins_left(btree_p, NULL, word); printf("%u\n", btree_size(btree_p)); char *word2 = malloc(strlen("there") + 1); strcpy(word, "there"); btree_ins_right(btree_p, root_node_p, word2); btree_destroy(&btree_p); return (EXIT_SUCCESS); }
TEST(BTREETEST, HandleNoneZeroInput) { MEM_POOL_PTR pMemPool = mem_pool_init(M_1M); BTREE_PTR pBtree = btree_init(pMemPool, "zbtree_index", "/tmp/", 3*MAX, HI_TYPE_LONGLONG); // BTREE_PTR pBtree = btree_init(pMemPool, "zbtree_index", "/tmp/", 3*MAX, HI_TYPE_LONG); BTREE_PTR pBtree2 = btree_init(pMemPool, "zbtree_index2", "/tmp/", 3*MAX, HI_TYPE_DOUBLE); init_profile(1000, pMemPool); /* struct timeval start, end, end2; double interval; gettimeofday(&start, NULL); srand((unsigned int)time(NULL)); int res,i; uint64 num; //插入10万数据 for ( i = 0; i < MAX; i += 1 ) { num = rand()%MAX; res = btree_insert(pMemPool, pBtree, num, i); ASSERT_EQ(res, 0); } gettimeofday(&end, NULL); interval = 1000000*(end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec); printf("insert %d data, cost %.2f ms\n", MAX, interval /1000); //范围查询10万次 BTREE_ENTRY_PTR pBtreeEntry; uint32 num2; // struct rowid_list *pRowidList; for ( i = 0; i < MAX; i += 1 ) { num = rand()%MAX+100; pBtreeEntry = btree_search(pBtree, num, CT_LE); // num2 = rand()%MAX+100; // struct rowid_list * pRowidList = btree_range_query(pBtree, num, 0, num2, 0, pMemPool); // if(pRowidList!=NULL) // { // printf("%d:", i); // print_rowid_list(pRowidList); // } // ASSERT_EQ((pBtreeEntry != NULL), 1); } gettimeofday(&end2, NULL); interval = 1000000*(end2.tv_sec - end.tv_sec) + (end2.tv_usec - end.tv_usec); printf("search %d data, cost %.2f ms\n", MAX, interval /1000); */ //插入3 7 7 9 11 2 4 5 6 8 int res = btree_insert(pMemPool, pBtree, 3, 1); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 7, 2); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 7, 10); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 9, 3); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 11, 4); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 2, 5); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 4, 6); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 5, 7); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 6, 8); ASSERT_EQ(res, 0); res = btree_insert(pMemPool, pBtree, 8, 9); ASSERT_EQ(res, 0); //等值查找3 9 8 // long long value = 3; BTREE_ENTRY_PTR pBtreeEntry = btree_search(pBtree, 3, CT_EQ); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 3); pBtreeEntry = btree_search(pBtree, 9, CT_EQ); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 9); pBtreeEntry = btree_search(pBtree, 1, CT_EQ); ASSERT_EQ((pBtreeEntry == NULL), 1); //查找<7 <6 pBtreeEntry = btree_search(pBtree, 7, CT_LT); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 6); pBtreeEntry = btree_search(pBtree, 6, CT_LT); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 5); //查找>7 >6 pBtreeEntry = btree_search(pBtree, 7, CT_GT); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 8); pBtreeEntry = btree_search(pBtree, 6, CT_GT); ASSERT_EQ((pBtreeEntry != NULL), 1); ASSERT_EQ(pBtreeEntry->key, 7); //测试btree next //BTREE_ENTRY_PTR pEntry = btree_search(pBtree, 2, 0); BTREE_ENTRY_PTR pEntry = btree_get_start_entry(pBtree); struct doc_row_unit *pUnit; while(pEntry != NULL) { std::cout << "key = " << pEntry->key << " docID: "; //输出doclist pUnit = doclist_next(pBtree->pDoclist, pEntry->doclist); while(pUnit != NULL) { std::cout << pUnit->doc_id << " "; pUnit = doclist_next(pBtree->pDoclist, pUnit->next); } pEntry = btree_next(pBtree, pEntry); std::cout << std::endl; } std::cout << std::endl; struct rowid_list * pRowidList = btree_range_query(pBtree, 0, 0, 10, 0, pMemPool); print_rowid_list(pRowidList); BTREE_KEY key; double value; //insert 3.1 11.11 111.111 1111.1 11111.1 11.11 value =3.1; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 1); ASSERT_EQ(res, 0); value =11.11; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 2); ASSERT_EQ(res, 0); value =111.111; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 3); ASSERT_EQ(res, 0); value =1111.1; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 4); ASSERT_EQ(res, 0); value =11111.1; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 5); ASSERT_EQ(res, 0); value =11.11; memcpy(&key, &value, 8); res = btree_insert(pMemPool, pBtree2, key, 6); ASSERT_EQ(res, 0); value =1111; memcpy(&key, &value, 8); pRowidList = btree_range_query(pBtree2, 0, 0, key, 0, pMemPool); print_rowid_list(pRowidList); pEntry = btree_get_start_entry(pBtree2); while(pEntry != NULL) { std::cout << "key = " << *(double*)&pEntry->key << " docID: "; //输出doclist pUnit = doclist_next(pBtree2->pDoclist, pEntry->doclist); while(pUnit != NULL) { std::cout << pUnit->doc_id << " "; pUnit = doclist_next(pBtree2->pDoclist, pUnit->next); } pEntry = btree_next(pBtree2, pEntry); std::cout << std::endl; } std::cout << std::endl; //测试dump //btree_dump(pBtree); btree_destroy(pBtree); btree_destroy(pBtree2); }
int main_bstree(int argc, char** argv) { bool ok = true; /* Load forums from file into list. */ list_t *list_p = NULL; if (ok) ok = (list_p = list_init()) != NULL; if (ok) { printf("-> Loading forum.csv...\n"); ok = load_file("forum" ".csv", list_p); } printf("Forums: %d\n", list_size(list_p)); /* Timing variables. */ double t1, t2, real_time; struct tms tb; double tickspersec = (double) sysconf(_SC_CLK_TCK); /* Lookup a specific forum in the list for some iterations. */ t1 = (double) times(&tb); unsigned int iter1, m; iter1 = 4 * 0; for (m = 0; m < iter1; m++) { unsigned int i, size; char *forum_name = "Wall of Eric Wilby"; size = list_size(list_p); for (i = 0; i < size; i++) { forum_t *forum_p = NULL; list_get(list_p, (void **) &forum_p, i); if (!strcmp(forum_get_title(forum_p), forum_name)) { // printf("%s\n", forum_get_title(forum_p)); break; } } } t2 = (double) times(&tb); real_time = (double) (t2 - t1) / tickspersec; printf("Completed %u list lookups in %.3f sec\n", m, real_time); /* Load all forums in list to binary search tree. */ btree_t *btree_p = btree_init(forum_dstr, forum_cmp); if (btree_p == NULL) return (EXIT_FAILURE); unsigned int i, size; size = list_size(list_p); for (i = 0; i < size; i++) { forum_t *f_p = NULL; list_get(list_p, (void **) &f_p, i); btree_ins(btree_p, f_p); } printf("Loaded %u forums.\n", btree_size(btree_p)); /* Print forums in alphabetical order, exec print function with INORDER mode. */ unsigned int limit = 1500; bool ret = btree_exec(btree_p, INORDER, forum_print, &limit); printf("%u\n", ret); /* Perform lookups in binary search tree */ forum_t *forum_p = forum_init(0, "Wall of Eric Wilby", 0); t1 = (double) times(&tb); unsigned int n, iter2; iter2 = 667; for (n = 0; n < iter2; n++) { btree_node_t *btree_node_p = btree_find(btree_p, forum_p); if (btree_node_p != NULL) { forum_t *f_p = (forum_t *) btree_node_get_data(btree_node_p); forum_get_title(f_p); // printf("%s\n", forum_get_title(f_p)); } } t2 = (double) times(&tb); real_time = (double) (t2 - t1) / tickspersec; printf("Completed %u bstree lookups in %.3f sec\n", n, real_time); /* Free all memory */ forum_destroy(&forum_p); btree_destroy(&btree_p); // btree destroys forums, which are also on the list // size = list_size(list_p); // // for (i = 0; i < size; i++) // { // forum_t *f_p = NULL; // list_get(list_p, (void **) &f_p, i); // forum_destroy(&f_p); // } list_destroy(&list_p); return (EXIT_SUCCESS); }
int main(void) { BTREE_HEAD(t); assert(btree_insert(&t, 177) == 0); assert(btree_insert(&t, 248) == 0); assert(btree_insert(&t, 124) == 0); assert(btree_insert(&t, 75) == 0); assert(btree_insert(&t, 133) == 0); assert(btree_insert(&t, 230) == 0); assert(btree_insert(&t, 129) == 0); assert(btree_insert(&t, 101) == 0); assert(btree_insert(&t, 140) == 0); assert(btree_insert(&t, 143) == 0); assert(btree_insert(&t, 246) == 0); assert(btree_insert(&t, 113) == 0); assert(btree_insert(&t, 167) == 0); assert(btree_insert(&t, 142) == 0); assert(btree_insert(&t, 72) == 0); assert(btree_insert(&t, 227) == 0); assert(btree_insert(&t, 235) == 0); assert(btree_insert(&t, 103) == 0); assert(btree_insert(&t, 103) == -1); assert(btree_insert(&t, 28) == 0); assert(btree_insert(&t, 113) == -1); assert(btree_insert(&t, 250) == 0); assert(btree_insert(&t, 44) == 0); assert(btree_insert(&t, 35) == 0); assert(btree_insert(&t, 130) == 0); assert(btree_insert(&t, 9) == 0); assert(btree_insert(&t, 196) == 0); assert(btree_insert(&t, 40) == 0); assert(btree_insert(&t, 125) == 0); assert(btree_insert(&t, 34) == 0); assert(btree_insert(&t, 245) == 0); assert(btree_insert(&t, 102) == 0); assert(btree_insert(&t, 245) == 0); assert(btree_insert(&t, 40) == 0); assert(btree_insert(&t, 216) == 0); assert(btree_insert(&t, 213) == 0); assert(btree_insert(&t, 57) == 0); assert(btree_insert(&t, 37) == 0); assert(btree_insert(&t, 245) == 0); assert(btree_insert(&t, 96) == 0); assert(btree_insert(&t, 7) == 0); assert(btree_insert(&t, 130) == 0); assert(btree_insert(&t, 78) == 0); assert(btree_insert(&t, 146) == 0); assert(btree_insert(&t, 247) == 0); assert(btree_insert(&t, 32) == 0); assert(btree_insert(&t, 251) == 0); assert(btree_insert(&t, 253) == 0); assert(btree_insert(&t, 113) == 0); assert(btree_insert(&t, 36) == 0); assert(btree_insert(&t, 62) == 0); assert(btree_insert(&t, 28) == 0); assert(btree_insert(&t, 31) == 0); assert(btree_insert(&t, 183) == 0); assert(btree_insert(&t, 53) == 0); assert(btree_insert(&t, 118) == 0); assert(btree_insert(&t, 80) == 0); assert(btree_insert(&t, 163) == 0); assert(btree_insert(&t, 243) == 0); assert(btree_insert(&t, 183) == 0); assert(btree_insert(&t, 141) == 0); assert(btree_insert(&t, 222) == 0); assert(btree_insert(&t, 49) == 0); assert(btree_insert(&t, 252) == 0); assert(btree_insert(&t, 221) == 0); assert(btree_insert(&t, 179) == 0); assert(btree_insert(&t, 245) == 0); assert(btree_insert(&t, 48) == 0); assert(btree_insert(&t, 251) == 0); assert(btree_insert(&t, 74) == 0); assert(btree_insert(&t, 228) == 0); assert(btree_insert(&t, 199) == 0); assert(btree_insert(&t, 9) == 0); assert(btree_insert(&t, 121) == 0); assert(btree_insert(&t, 17) == 0); assert(btree_insert(&t, 133) == 0); assert(btree_insert(&t, 255) == 0); assert(btree_insert(&t, 166) == 0); assert(btree_insert(&t, 169) == 0); assert(btree_insert(&t, 163) == 0); assert(btree_insert(&t, 225) == 0); assert(btree_insert(&t, 213) == 0); assert(btree_insert(&t, 39) == 0); assert(btree_insert(&t, 31) == 0); assert(btree_insert(&t, 37) == 0); assert(btree_insert(&t, 162) == 0); assert(btree_insert(&t, 7) == 0); assert(btree_insert(&t, 195) == 0); assert(btree_insert(&t, 199) == 0); assert(btree_insert(&t, 160) == 0); assert(btree_insert(&t, 164) == 0); assert(btree_insert(&t, 246) == 0); assert(btree_insert(&t, 224) == 0); assert(btree_insert(&t, 19) == 0); assert(btree_insert(&t, 171) == 0); assert(btree_insert(&t, 186) == 0); assert(btree_insert(&t, 81) == 0); assert(btree_insert(&t, 45) == 0); assert(btree_insert(&t, 197) == 0); assert(btree_insert(&t, 206) == 0); btree_destroy(&t); return 0; }