Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int isLeaf(bTree *bt){
- return (bt->element[0].left == NULL);
- }
- bTree* getPredecessor(bTree *bt){
- if(isLeaf(bt))
- return bt;
- return getPredecessor(bt->right);
- }
- void bTree_remove(bTree **tree, int key){
- if(*tree == NULL)
- return;
- int i, n = (*tree)->count;
- for(i = 0; i < n; i++){
- if (key == (*tree)->element[i].key && isLeaf(*tree)){ //caso 1, onde a remoção é numa folha
- (*tree)->count--;
- while(i < (*tree)->count){
- (*tree)->element[i] = (*tree)->element[i+1];
- ++i;
- }
- }
- else if(key == (*tree)->element[i].key){
- bTree *predecessorLef = getPredecessor((*tree)->element[i].left);
- (*tree)->element[i].key = predecessorLef->element[--predecessorLef->count].key;
- if(predecessorLef->count >= (BTree_PageMaxSize + 1)/2){} //caso 2, onde a pagina que contem o predecessor permanece balanceada
- else{
- //casos 3 e 4
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement