Arvore B

668 palavras 3 páginas
#include
#include

#define T 3

struct NoArvB
{
int n; //Numero de elemento do nó int folha; //Se é folha = 1, senão = 0 int chave[2 * T - 1]; // Dados armazenados struct NoArvB *pai; // ponteiro para o Pai struct NoArvB *filhos[2 * T]; // Ponteiros para os Filhos
};

NoArvB * QuebraNo (int i, NoArvB *Pt)
{
NoArvB *PtAux1, *PtAux2, *Pai; int n;

//Apenas para o nó raiz if (Pt->pai == NULL) { //Aloca o nós que serão partidos PtAux1 = (NoArvB *) malloc (sizeof (NoArvB)); PtAux2 = (NoArvB *) malloc (sizeof (NoArvB)); //Copia os dados do nó cheio para dois nós vázios exeto o dado do meio for(int j = 0; j < i; j++) { PtAux1->chave[j] = Pt->chave[j]; } for(int j = i+1; j < 2 * T; j++) { PtAux1->chave[j] = Pt->chave[j]; }

//Atribui o valor de t - 1, para os nos, ou seja, a quantidade de dados PtAux1->n = T - 1; PtAux2->n = T - 1;

//Filhos apontam para o pai PtAux1->pai = Pt; PtAux2->pai = Pt;

//Pai aponta para o filhos Pt->filhos[0] = PtAux1; Pt->filhos[1] = PtAux2;

if (Pt->folha == 1) //Caso a raiz seja folha { Pt->folha = 0; PtAux1->folha = 1; PtAux2->folha = 1; } else // Senão for folha os filhos são copiados para os dois nós novos { for(int j = 0; j filhos[j] = Pt->filhos[j]; } for(int j = T; j filhos[j] = Pt->filhos[j]; } }

//O dados do meio, vira o primeiro elemento, da nova raiz. Pt->chave[0] = Pt->chave[T - 1]; Pt->n = 1;

return Pt;

} else //Senão for raiz { PtAux1 = (NoArvB *) malloc (sizeof (NoArvB));

Pai = Pt->pai; PtAux1->n = T - 1; // Copia os dados para a segundo nó for(int j = 0; j < T - 1; j++) PtAux1->chave[j] = Pt->chave[j + T];

if (Pt->folha == 0) // Se não é folha, ele copia os filhos também for(int j = 0; j filhos[j] = Pt->filhos[j + T]; else //Se for folha, ele apenas indica isso atribuindo 1 PtAux1->folha = 1;

Relacionados

  • Árvore b+
    1145 palavras | 5 páginas
  • arvore b+
    1899 palavras | 8 páginas
  • Arvore B+
    314 palavras | 2 páginas
  • Arvore B
    1017 palavras | 5 páginas
  • Arvore b
    5428 palavras | 22 páginas
  • Arvore b
    321 palavras | 2 páginas
  • Algoritmos de árvore b*
    1096 palavras | 5 páginas
  • Árvore b+ hash
    3498 palavras | 14 páginas
  • Estrutura de dados - Arvore B
    1794 palavras | 8 páginas
  • Arvores multiplas, árvore b
    538 palavras | 3 páginas