Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct estruturaArvBin{
  5. int valor;
  6. struct estruturaArvBin *esq, *dir;
  7. } tipoArvBin;
  8.  
  9. int ehFolha(tipoArvBin *arv){
  10. if(arv->esq != NULL || arv->dir != NULL)
  11. return 0;
  12. return 1;
  13. }
  14.  
  15. tipoArvBin **buscaNo(tipoArvBin** arv, int valor){
  16. if((*arv) != NULL){
  17. if((*arv)->valor == valor)
  18. return arv;
  19. if(valor > (*arv)->valor)
  20. buscaNo(&(*arv)->dir, valor);
  21. else
  22. buscaNo(&(*arv)->esq, valor);
  23. }
  24.  
  25. }
  26.  
  27. int maiorValorArvore(tipoArvBin* arv){
  28. if(arv->dir == NULL)
  29. return ((arv)->valor);
  30. maiorValorArvore((arv)->dir);
  31. }
  32.  
  33.  
  34. void insereNo(tipoArvBin **arv, int valor){
  35. tipoArvBin *novoNo;
  36. novoNo = (tipoArvBin*) malloc (sizeof(tipoArvBin));
  37. novoNo->valor = valor;
  38. novoNo->esq = NULL;
  39. novoNo->dir = NULL;
  40.  
  41. if(*arv == NULL){
  42. *arv = novoNo;
  43. }else{
  44. if(valor <= (*arv)->valor)
  45. insereNo(&(*arv)->esq, valor);
  46. else
  47. insereNo(&(*arv)->dir, valor);
  48. }
  49. }
  50.  
  51. void removeNo(tipoArvBin **arv, int valor){
  52. tipoArvBin *aux;
  53. int maiorVal;
  54.  
  55. if( arv != NULL){
  56. if((*arv)->valor == valor){
  57. if(ehFolha(*arv)){
  58. free(*arv);
  59. *arv = NULL;
  60. }else if((*arv)->dir == NULL && (*arv)->esq != NULL){
  61. aux = *arv;
  62. *arv = (*arv)->esq;
  63. free(aux);
  64. }else if((*arv)->dir != NULL && (*arv)->esq == NULL){
  65. aux = *arv;
  66. *arv = (*arv)->dir;
  67. free(aux);
  68. }else{
  69. maiorVal = maiorValorArvore((*arv)->esq);
  70. (*arv)->valor = maiorVal;
  71. removeNo(&(*arv)->esq, maiorVal);
  72. }
  73. }else{
  74. if(valor > (*arv)->valor)
  75. removeNo(&(*arv)->dir, valor);
  76. else
  77. removeNo(&(*arv)->esq, valor);
  78. }
  79. }
  80. }
  81.  
  82. void imprimePreOrdem(tipoArvBin *arv){
  83. if(arv != NULL){
  84. printf("[%d] ", arv->valor);
  85. imprimePreOrdem(arv->esq);
  86. imprimePreOrdem(arv->dir);
  87. }
  88.  
  89. }
  90.  
  91. int main(int argc, char const *argv[]){
  92. tipoArvBin *arvore, *noTeste;
  93. arvore = NULL;
  94.  
  95. insereNo(&arvore, 10);
  96. insereNo(&arvore, 9);
  97. insereNo(&arvore, 50);
  98. insereNo(&arvore, 20);
  99. insereNo(&arvore, 2);
  100. insereNo(&arvore, 3);
  101. insereNo(&arvore, 4);
  102. insereNo(&arvore, -1);
  103. imprimePreOrdem(arvore);
  104. printf("\n");
  105. removeNo(&arvore, 10);
  106. removeNo(&arvore, 3);
  107. removeNo(&arvore, 4);
  108. removeNo(&arvore, -1);
  109. removeNo(&arvore, 9);
  110.  
  111. imprimePreOrdem(arvore);
  112.  
  113. return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement