SHARE
TWEET

Untitled

a guest Apr 20th, 2019 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top