Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.04 KB | None | 0 0
  1. int isLeaf(bTree *bt){
  2.     return (bt->element[0].left == NULL);
  3. }
  4.  
  5. bTree* getPredecessor(bTree *bt){
  6.     if(isLeaf(bt))
  7.         return bt;
  8.     return getPredecessor(bt->right);
  9. }
  10.  
  11. void bTree_remove(bTree **tree, int key){
  12.     if(*tree == NULL)
  13.         return;
  14.     int i, n = (*tree)->count;
  15.     for(i = 0; i < n; i++){
  16.         if (key == (*tree)->element[i].key && isLeaf(*tree)){ //caso 1, onde a remoção é numa folha
  17.             (*tree)->count--;
  18.             while(i < (*tree)->count){
  19.                 (*tree)->element[i] = (*tree)->element[i+1];
  20.                 ++i;
  21.             }
  22.         }
  23.         else if(key == (*tree)->element[i].key){
  24.             bTree *predecessorLef = getPredecessor((*tree)->element[i].left);
  25.             (*tree)->element[i].key = predecessorLef->element[--predecessorLef->count].key;
  26.  
  27.             if(predecessorLef->count >= (BTree_PageMaxSize + 1)/2){} //caso 2, onde a pagina que contem o predecessor permanece balanceada
  28.             else{
  29.                 //casos 3 e 4
  30.             }
  31.         }
  32.     }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement