Advertisement
sconetto

EDA - Árvore Binária 2

Jun 2nd, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct _arvore {
  5.     int info;
  6.     struct _arvore *sae;
  7.     struct _arvore *sad;
  8. };
  9.  
  10. typedef struct _arvore arvore;
  11.  
  12. void criarArvore(arvore **raiz) {
  13.     *raiz = NULL;
  14. }
  15.  
  16. void inserir(arvore **raiz, int numero) {
  17.     if(*raiz == NULL) {
  18.         *raiz = (arvore *) malloc(sizeof(arvore));
  19.         (*raiz)->sae = NULL;
  20.         (*raiz)->sad = NULL;
  21.         (*raiz)->info = numero;
  22.     }
  23.     else {
  24.         if(numero < (*raiz)->info)
  25.             inserir(&(*raiz)->sae, numero);
  26.         if(numero > (*raiz)->info)
  27.             inserir(&(*raiz)->sad, numero);
  28.     }
  29. }
  30.  
  31. arvore *MaiorDireita(arvore **no){
  32.     if((*no)->sad != NULL)
  33.        return MaiorDireita(&(*no)->sad);
  34.     else{
  35.        arvore *aux = *no;
  36.        if((*no)->sae != NULL)
  37.           *no = (*no)->sae;
  38.        else
  39.           *no = NULL;
  40.        return aux;
  41.        }
  42. }
  43.  
  44. arvore *MenorEsquerda(arvore **no){
  45.     if((*no)->sae != NULL)
  46.        return MenorEsquerda(&(*no)->sae);
  47.     else{
  48.        arvore *aux = *no;
  49.        if((*no)->sad != NULL)
  50.           *no = (*no)->sad;
  51.        else
  52.           *no = NULL;
  53.        return aux;
  54.        }
  55. }
  56.  
  57. void remover(arvore **raiz, int numero){
  58.     if(*raiz == NULL){
  59.        printf("Numero nao existe na arvore!");
  60.        return;
  61.     }
  62.     if(numero < (*raiz)->info)
  63.        remover(&(*raiz)->sae, numero);
  64.     else
  65.        if(numero > (*raiz)->info)
  66.           remover(&(*raiz)->sad, numero);
  67.        else{
  68.           arvore *pAux = *raiz;
  69.           if (((*raiz)->sae == NULL) && ((*raiz)->sad == NULL)){
  70.                 free(pAux);
  71.                 (*raiz) = NULL;
  72.                }
  73.           else{
  74.              if ((*raiz)->sae == NULL){
  75.                 (*raiz) = (*raiz)->sad;
  76.                 pAux->sad = NULL;
  77.                 free(pAux); pAux = NULL;
  78.                 }
  79.              else{
  80.                 if ((*raiz)->sad == NULL){
  81.                     (*raiz) = (*raiz)->sae;
  82.                     pAux->sae = NULL;
  83.                     free(pAux); pAux = NULL;
  84.                     }
  85.                 else{
  86.                    pAux = MaiorDireita(&(*raiz)->sae);
  87.                    pAux->sae = (*raiz)->sae;
  88.                    pAux->sad = (*raiz)->sad;
  89.                    (*raiz)->sae = (*raiz)->sad = NULL;
  90.                    free((*raiz));  *raiz = pAux;  pAux = NULL;
  91.                    }
  92.                 }
  93.              }
  94.           }
  95. }
  96.  
  97. void exibirEmOrdem(arvore *raiz){
  98.     if(raiz != NULL){
  99.         exibirEmOrdem(raiz->sae);
  100.         printf("\n%i", raiz->info);
  101.         exibirEmOrdem(raiz->sad);
  102.     }
  103. }
  104.  
  105. void exibirInversa(arvore *raiz){
  106.     if(raiz != NULL){
  107.         exibirInversa(raiz->sad);
  108.         printf("\n%i", raiz->info);
  109.         exibirInversa(raiz->sae);
  110.     }
  111. }
  112.  
  113. int main(int argc, char const *argv[]) {
  114.   arvore **arvore;
  115.   criarArvore(arvore);
  116.   inserir(arvore, 50);
  117.   inserir(arvore, 25);
  118.   inserir(arvore, 32);
  119.   inserir(arvore, 14);
  120.   inserir(arvore, 41);
  121.   inserir(arvore, 10);
  122.   inserir(arvore, 23);
  123.   inserir(arvore, 5);
  124.   inserir(arvore, 1);
  125.   inserir(arvore, 52);
  126.   printf("Em ordem\n");
  127.   exibirEmOrdem(*arvore);
  128.   printf("\n\nInversa\n");
  129.   exibirInversa(*arvore);
  130.   printf("\n\n");
  131.   return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement