Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PONT_BIN transformaBayer(PONT_ARV Btree) {
- PONT_BIN Binario = criaNohBinario(); //Noh onde sera criada nova arvore binaria
- if(Btree){
- if(Btree->n == 1)
- { //O noh contem apenas uma chave
- printf(" oi 1 ");
- Binario->info = Btree->info[0]; //O noh da arvore binaria recebe essa unica chave
- //Chama recursivamente para os ponteiros verticais receberem os filhos
- Binario->vertEsq = transformaBayer(Btree->filhos[0]);
- Binario->vertDir = transformaBayer(Btree->filhos[1]);
- //Como soh ha uma chave nao ha ponteiros horizontais.
- }
- if(Btree->n == 2)
- { //O noh da Btree contem duas chaves
- printf (" oi 2 ");
- Binario->info = Btree->info[1]; //O noh binario fica com a segunda chave
- //O ponteiro horizontal a esquerda do noh binario fica com a primeira chave:
- Binario->horiEsq = criaNohBinario();
- Binario->horiEsq->info = Btree->info[0];
- //Chamando recursivamente para os ponteiros verticais e o horizontal a esquerda
- //receberem os filhos do noh da B-tree:
- Binario->horiEsq->vertEsq = transformaBayer(Btree->filhos[0]);
- Binario->vertEsq = transformaBayer(Btree->filhos[1]);
- Binario->vertDir = transformaBayer(Btree->filhos[2]);
- }
- if(Btree->n == 3)
- { //O noh da B-tree contem 3 chaves
- printf (" oi 3 ");
- Binario->horiEsq = criaNohBinario(); //Alocando memoria
- Binario->horiDir = criaNohBinario();
- Binario->info = Btree->info[1]; //O noh binario recebe a chave do meio
- Binario->horiEsq->info = Btree->info[0]; //O noh a esquerda de binario recebe a primeira chave
- Binario->horiDir->info = Btree->info[2]; //O noh a direita de binario recebe a ultima chave
- //Neste caso o noh binario nao tem ponteiros verticais
- //Mas os dois nohs apontados pelos ponteiros horizontais possuem ponteiros verticais:
- //Chama recursivamente para cada um receber um filho sequencialmente
- Binario->horiEsq->vertEsq = transformaBayer(Btree->filhos[0]);
- Binario->horiEsq->vertDir = transformaBayer(Btree->filhos[1]);
- Binario->horiDir->vertEsq = transformaBayer(Btree->filhos[2]);
- Binario->horiDir->vertDir = transformaBayer(Btree->filhos[3]);
- }
- return Binario; //Retorna o noh da arvore binaria com todas as alteracoes feitas
- }
- }
Add Comment
Please, Sign In to add comment