Guest User

Untitled

a guest
Jun 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. PONT_BIN transformaBayer(PONT_ARV Btree) {
  2.  
  3. PONT_BIN Binario = criaNohBinario(); //Noh onde sera criada nova arvore binaria
  4.  
  5. if(Btree){
  6. if(Btree->n == 1)
  7. { //O noh contem apenas uma chave
  8. printf(" oi 1 ");
  9. Binario->info = Btree->info[0]; //O noh da arvore binaria recebe essa unica chave
  10. //Chama recursivamente para os ponteiros verticais receberem os filhos
  11. Binario->vertEsq = transformaBayer(Btree->filhos[0]);
  12. Binario->vertDir = transformaBayer(Btree->filhos[1]);
  13. //Como soh ha uma chave nao ha ponteiros horizontais.
  14. }
  15. if(Btree->n == 2)
  16. { //O noh da Btree contem duas chaves
  17. printf (" oi 2 ");
  18. Binario->info = Btree->info[1]; //O noh binario fica com a segunda chave
  19. //O ponteiro horizontal a esquerda do noh binario fica com a primeira chave:
  20. Binario->horiEsq = criaNohBinario();
  21. Binario->horiEsq->info = Btree->info[0];
  22. //Chamando recursivamente para os ponteiros verticais e o horizontal a esquerda
  23. //receberem os filhos do noh da B-tree:
  24. Binario->horiEsq->vertEsq = transformaBayer(Btree->filhos[0]);
  25. Binario->vertEsq = transformaBayer(Btree->filhos[1]);
  26. Binario->vertDir = transformaBayer(Btree->filhos[2]);
  27. }
  28. if(Btree->n == 3)
  29. { //O noh da B-tree contem 3 chaves
  30. printf (" oi 3 ");
  31. Binario->horiEsq = criaNohBinario(); //Alocando memoria
  32. Binario->horiDir = criaNohBinario();
  33. Binario->info = Btree->info[1]; //O noh binario recebe a chave do meio
  34. Binario->horiEsq->info = Btree->info[0]; //O noh a esquerda de binario recebe a primeira chave
  35. Binario->horiDir->info = Btree->info[2]; //O noh a direita de binario recebe a ultima chave
  36. //Neste caso o noh binario nao tem ponteiros verticais
  37. //Mas os dois nohs apontados pelos ponteiros horizontais possuem ponteiros verticais:
  38. //Chama recursivamente para cada um receber um filho sequencialmente
  39. Binario->horiEsq->vertEsq = transformaBayer(Btree->filhos[0]);
  40. Binario->horiEsq->vertDir = transformaBayer(Btree->filhos[1]);
  41. Binario->horiDir->vertEsq = transformaBayer(Btree->filhos[2]);
  42. Binario->horiDir->vertDir = transformaBayer(Btree->filhos[3]);
  43. }
  44. return Binario; //Retorna o noh da arvore binaria com todas as alteracoes feitas
  45. }
  46. }
Add Comment
Please, Sign In to add comment