Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void remove(BNo * raiz, Tipo elem, bool &status){
- int i = 1,j;
- // BNo * aux;
- if (raiz == NULL){
- cout << "Chave não encontrada\n";
- status = false;
- return;
- }
- while (i < raiz->qtd && elem > raiz->chv[i-1]) i++;
- if (elem == raiz->chv[i-1]) {
- //Testa se é nó folha
- if (raiz->filhos[i] == NULL) {
- raiz->qtd--;
- status = (raiz->qtd < MIN_OCUP);
- for (j=i; j <= raiz->qtd; j++) {
- raiz->chv[j-1] = raiz->chv[j];
- raiz->filhos[j] = raiz->filhos[j+1];
- }
- return;
- }
- //Não é folha, substitui pela chave imediatamente maior
- raiz->chv[i-1] = raiz->filhos[i]->chv[0];
- remove(raiz->filhos[i], raiz->chv[i-1], status);
- if (status) {
- // concatena ou redistribui
- if (raiz->filhos[i-1]->qtd + raiz->filhos[i]->qtd >= MAX_CHAVES){
- insereArvoreB(raiz->filhos[i], raiz->chv[i]);
- raiz->chv[i] = raiz->filhos[i+1]->chv[0];
- removeArvoreB(raiz->filhos[i+1], raiz->chv[i]);
- status = false;
- }
- else {
- concatena(raiz->chv[i-1], raiz->filhos[i-1], raiz->filhos[i]);
- raiz->qtd--;
- for (j=i; j <= raiz->qtd; j++) {
- raiz->chv[j-1] = raiz->chv[j];
- raiz->filhos[j] = raiz->filhos[j+1];
- }
- status = (raiz->qtd < MIN_OCUP);
- }
- }
- return;
- }
- if (elem > raiz->chv[i-1])
- remove(raiz->filhos[i],elem, status);
- else
- remove(raiz->filhos[i-1], elem, status);
- if (status) {
- // concatena ou distribui
- if (raiz->filhos[i]->qtd + raiz->filhos[i]->qtd >= MAX_CHAVES){
- insereArvoreB(raiz->filhos[i], raiz->chv[i]);
- raiz->chv[i] = raiz->filhos[i+1]->chv[0];
- removeArvoreB(raiz->filhos[i+1], raiz->chv[i]);
- status = false;
- }
- else {
- concatena(raiz->chv[i-1],raiz->filhos[i-1], raiz->filhos[i] );
- raiz->qtd--;
- for (j=i; j < raiz->qtd; j++) {
- raiz->chv[j-1] = raiz->chv[j];
- raiz->filhos[j] = raiz->filhos[j+1];
- }
- status = (raiz->qtd < MIN_OCUP);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement