void print_btree(btree_node *r) { unsigned int j; if (r != NULL) { for (j = 0; j < r->nkeys; j++) { print_btree(r->children[j]); printf("%f ", r->keys[j]); } print_btree(r->children[j]); } }
//普通打印(打印包括节点信息) void print_btree(bnode * root) { if(root == NULL) { return; } printf("节点元素:"); printf("是否叶子节点:%d", root -> isleaf); //打印根节点 printf(";成员:["); for(int i = 0; i < root -> keynum; i++) { printf("%d", root -> keys[i]); if(root -> keynum - 1 != i) { printf(","); } } printf("]"); printf(";在父节点的位置:%d", root -> p_pos); printf(";key数量:%d\n", root -> keynum); //打印子节点 for(int i = 0; i <= root -> keynum; i++) { print_btree(root -> children[i]); } }
int main() { btree_node *bt = NULL; char b[50] = "a(b(c),d(e(f,g),h(,i)))"; //char b[50] = "a"; int depth = 0; printf("%s\n",b); init_btree(&bt); create_btree(&bt, b); print_btree(bt); printf("\n"); depth = depth_btree(bt); printf("btree depth:%d\n", depth); return 0; }
int main() { Chave chave, inicializadora; short rrn, pos; strcpy(inicializadora.chave, "SHE01\0"); BTPAGE page; if (btopen()) /* try to open btree.dat and get root */ printf("Arquivo aberto de índice aberto com sucesso!\n"); else root = create_tree(inicializadora); /* if btree.dat not there, create it */ strcpy(chave.chave, "BBB02\0"); chave.rrn_dados = 22; insert(root, chave); strcpy(chave.chave, "CCC02\0"); insert(root, chave); strcpy(chave.chave, "DDD02\0"); insert(root, chave); strcpy(chave.chave, "EEE02\0"); insert(root, chave); strcpy(chave.chave, "FFF02\0"); insert(root, chave); strcpy(chave.chave, "GGG02\0"); insert(root, chave); strcpy(chave.chave, "HHH02\0"); insert(root, chave); strcpy(chave.chave, "III02\0"); insert(root, chave); strcpy(chave.chave, "JJJ02\0"); insert(root, chave); strcpy(chave.chave, "KKK02\0"); insert(root, chave); strcpy(chave.chave, "LLL02\0"); insert(root, chave); strcpy(chave.chave, "MMM02\0"); insert(root, chave); strcpy(chave.chave, "NNN02\0"); insert(root, chave); strcpy(chave.chave, "OOO02\0"); insert(root, chave); strcpy(chave.chave, "PPP02\0"); insert(root, chave); strcpy(chave.chave, "QQQ02\0"); insert(root, chave); strcpy(chave.chave, "RRR02\0"); insert(root, chave); strcpy(chave.chave, "SSS02\0"); chave.rrn_dados = 45; insert(root, chave); strcpy(chave.chave, "TTT02\0"); insert(root, chave); strcpy(chave.chave, "UUU02\0"); insert(root, chave); strcpy(chave.chave, "VVV02\0"); insert(root, chave); strcpy(chave.chave, "VVX02\0"); insert(root, chave); strcpy(chave.chave, "VVW02\0"); insert(root, chave); strcpy(chave.chave, "WWW02\0"); insert(root, chave); strcpy(chave.chave, "WWY02\0"); insert(root, chave); strcpy(chave.chave, "YYY02\0"); insert(root, chave); strcpy(chave.chave, "XXX02\0"); insert(root, chave); strcpy(chave.chave, "ZZZ02\0"); insert(root, chave); printf("\n"); strcpy(chave.chave, "BBB02\0"); if (search_key_on_tree(root, chave, &rrn, &pos)) printf("RRN %d\n", rrn); else printf("Nao achouw\n"); print_btree(root); strcpy(chave.chave, "ZZZ02\0"); remove_key(root, chave); print_btree(root); strcpy(chave.chave, "YYY02\0"); remove_key(root, chave); print_btree(root); strcpy(chave.chave, "VVX02\0"); remove_key(root, chave); print_btree(root); btclose(); return 0; }
int main(int argc, char * argv[]){ // int data[] = {20,8,5,3,1,10,2,7,9,4,6,18,11,12,15}; // int data[] = {20,8,5,3,1,10,2,7,9,4,6,18,11}; int data[] = {20,8,5,3,1,10,2,7,9,4,6,18}; int len; GET_ARRAY_LEN(data, len); init_btree(); //插入节点 for (int i = 0; i < len; i++) { insert(&bt_root, data[i]); } //测试查找函数 // int pos = -1; // bnode * want = find(bt_root, 9, &pos); // if(pos != -1) // { // printf("%d\n", want -> parent -> keys[0]); // printf("pos :%d\n", pos); // printf("p_pos :%d\n", want -> p_pos); // } // else // { // printf("%s\n","没找到元素"); // } //层级打印B树 printf("层级打印:\n"); hierarchy_traversal_recurse(bt_root, 1); printf("普通打印:\n"); print_btree(bt_root); //测试删除数据 示例 1 // remove_key( &bt_root, 7 ); // remove_key( &bt_root, 5 ); // remove_key( &bt_root, 4 ); // remove_key( &bt_root, 1 ); // remove_key( &bt_root, 2 ); // remove_key( &bt_root, 3 ); // remove_key( &bt_root, 18 ); //测试删除数据 示例 2 // remove_key( &bt_root, 20 ); // remove_key( &bt_root, 7 ); //测试find_max函数 // int pos,key = -1; // bnode * want = find_max(bt_root -> children[2], &pos, &key); // if(pos != -1) // { // printf("%d,%d\n",pos,want -> keys[pos]); // } // else // { // printf("%s\n","没找到元素"); // } printf("层级打印:\n"); hierarchy_traversal_recurse(bt_root, 1); printf("普通打印:\n"); print_btree(bt_root); return 1; }