Guest User

Untitled

a guest
Jun 25th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. int insere_arvore(ArvBin* raiz, int valor){
  2. if(raiz == NULL)
  3. return 0;
  4. NO* novo;
  5. novo = (NO*) malloc(sizeof(NO));
  6. if(novo == NULL)
  7. return 0;
  8. novo->info = valor;
  9. novo->dir = NULL;
  10. novo->esq = NULL;
  11.  
  12. if(*raiz == NULL)
  13. *raiz = novo;
  14. else{
  15. NO* atual = *raiz;
  16. NO* ant = NULL;
  17. while(atual != NULL){
  18. ant = atual;
  19. if(valor == atual->info){
  20. free(novo);
  21. return 0;
  22. }
  23.  
  24. if(valor > atual->info)
  25. atual = atual->dir;
  26. else
  27. atual = atual->esq;
  28. }
  29. if(valor > ant->info)
  30. ant->dir = novo;
  31. else
  32. ant->esq = novo;
  33. }
  34. return 1;
  35. }
  36.  
  37. NO* remove_atual(NO* atual) {
  38. NO *no1, *no2;
  39. if(atual->esq == NULL){
  40. no2 = atual->dir;
  41. free(atual);
  42. return no2;
  43. }
  44. no1 = atual;
  45. no2 = atual->esq;
  46. while(no2->dir != NULL){
  47. no1 = no2;
  48. no2 = no2->dir;
  49. }
  50. if(no1 != atual){
  51. no1->dir = no2->esq;
  52. no2->esq = atual->esq;
  53. }
  54. no2->dir = atual->dir;
  55. free(atual);
  56. return no2;
  57. }
  58.  
  59. int insere_rec_arvore(ArvBin* raiz, int valor, NO* atual){
  60. if(raiz == NULL)
  61. return 0;
  62. NO* novo;
  63. novo = (NO*) malloc(sizeof(NO));
  64. if(novo == NULL)
  65. return 0;
  66. novo->info = valor;
  67. novo->dir = NULL;
  68. novo->esq = NULL;
  69.  
  70. if(*raiz == NULL)
  71. *raiz = novo;
  72. else{
  73. NO* atual = *raiz;
  74. NO* ant = NULL;
  75. if (atual != NULL) {
  76. ant = atual;
  77. if(valor == atual->info){
  78. free(novo);
  79. return 0;//elemento jรก existe
  80. }
  81.  
  82. if(valor > atual->info) {
  83. atual = atual->dir;
  84. } else {
  85. atual = atual->esq;
  86. insere_rec_arvore(raiz, valor, atual);
  87. }
  88. }
  89. if(valor > ant->info)
  90. ant->dir = novo;
  91. else
  92. ant->esq = novo;
  93. }
  94. return 1;
  95. }
  96.  
  97. NO* remove_rec_atual(NO* atual, NO *no1, NO *no2 ) {
  98. if(atual->esq == NULL){
  99. no2 = atual->dir;
  100. free(atual);
  101. return no2;
  102. }
  103. no1 = atual;
  104. no2 = atual->esq;
  105. if(no2->dir != NULL){
  106. no1 = no2;
  107. no2 = no2->dir;
  108. remove_rec_atual(atual, no1, no2);
  109. }
  110. if(no1 != atual){
  111. no1->dir = no2->esq;
  112. no2->esq = atual->esq;
  113. }
  114. no2->dir = atual->dir;
  115. free(atual);
  116. return no2;
  117. }
Add Comment
Please, Sign In to add comment