Advertisement
Guest User

arvore_avl_trabalho

a guest
Nov 19th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.25 KB | None | 0 0
  1. /* ====================================
  2.         Incluindo bibliotecas
  3. =====================================*/
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<locale.h>
  7.  
  8. /* ====================================
  9.             Struct do Nó
  10. =====================================*/
  11. typedef struct No{
  12.     int valor;
  13.     int balanceamento;
  14.     struct No* esquerda;
  15.     struct No* direita;
  16. }no;
  17.  
  18. /* ====================================
  19.         Protótipo das funções
  20. =====================================*/
  21. struct No* raiz;
  22. struct No* inserir(struct No* no_raiz, int numero);
  23. void em_ordem(struct No* no_raiz);
  24. void pre_ordem(struct No* no_raiz);
  25. void pos_ordem(struct No* no_raiz);
  26. struct No* buscar_numero(struct No* no_raiz, int num);
  27. void menu();
  28.  
  29. /* ====================================
  30.                Função main
  31. =====================================*/
  32. int main(){
  33.     //Ajustando o idioma
  34.     setlocale(LC_ALL,"Portuguese");
  35.  
  36.     //Chamando a função menu 
  37.     menu();
  38.    
  39.     //Tratamento de erro
  40.     return 0;
  41. }
  42.  
  43. /* ====================================
  44.               Função menu
  45. =====================================*/
  46. void menu(){
  47.     //Variáveis
  48.     int opcao, num, valor, i;
  49.    
  50.     do{
  51.         system("cls");
  52.         printf("1 - Inserir elemento.\n");
  53.         printf("2 - Buscar elemento.\n");
  54.         printf("3 - Remover elemento.\n");
  55.         printf("4 - Mostrar árvore.\n");
  56.         printf("5 - Sair.\n");
  57.         printf("Digite a opção desejada: ");
  58.         scanf("%d", &opcao);
  59.        
  60.         switch(opcao){
  61.             case 1:
  62.                 raiz = NULL;
  63.                 printf("Digita quantos números deseja inserir: ");
  64.                 scanf("%d", &num);
  65.                 for(i=0; i<num; i++){
  66.                     printf("Número %d: ", i+1);
  67.                     scanf("%d", &valor);
  68.                     raiz = inserir(raiz, valor);
  69.                     printf("Número %d inserido com sucesso!\n", valor);
  70.                 }
  71.                 system("pause");
  72.                 break;
  73.             case 2:
  74.                 printf("Digite o número que deseja procurar: ");
  75.                 scanf("%d", &num);
  76.                 buscar_numero(raiz, num);
  77.                 system("pause");
  78.                 break;
  79.                            
  80.             case 3:
  81.                
  82.             case 4:
  83.                 printf("Em ordem: ");
  84.                 em_ordem(raiz);
  85.                 printf("\n");
  86.            
  87.                 printf("Pré-Ordem: ");
  88.                 pre_ordem(raiz);
  89.                 printf("\n");
  90.            
  91.                 printf("Pós-Ordem: ");
  92.                 pos_ordem(raiz);
  93.                 printf("\n");
  94.                 system("pause");
  95.                
  96.                 break;
  97.             case 5:
  98.                 printf("Saindo do programa...\n");
  99.                 sleep(1);
  100.                 system("pause");
  101.                 break;
  102.                
  103.             default:
  104.                 printf("Opção inválida!\n");
  105.                 system("pause");
  106.                 break;
  107.         }
  108.     }while(opcao!=5);
  109. }
  110.  
  111. /* ====================================
  112.         Função inserir na árvore
  113. =====================================*/
  114. struct No* inserir(struct No* no_raiz, int numero){
  115.     //Inserindo o primeiro elemento na árvore
  116.     if(no_raiz==NULL)
  117.     {
  118.         //Alocando espaço para o elemento
  119.         no_raiz = (struct No*)malloc(sizeof(struct No));
  120.        
  121.         //Colocando no campo valor o primeiro número da árvore
  122.         no_raiz->valor = numero;
  123.        
  124.         //Setando os ponteiros esquerda e direita em nulos
  125.         no_raiz->esquerda = NULL;
  126.         no_raiz->direita = NULL;
  127.     }
  128.    
  129.     //Caso já existam elementos irá inserir de forma recursiva na esquerda
  130.     else if(numero < no_raiz->valor){
  131.         no_raiz->esquerda = inserir(no_raiz->esquerda, numero);
  132.     }
  133.    
  134.     //Caso já existam elementos irá inserir de forma recursiva na direita
  135.     else{
  136.         no_raiz->direita = inserir(no_raiz->direita, numero);
  137.     }
  138.    
  139.     //Retornando o struct
  140.     return no_raiz;
  141. }
  142.  
  143. /* ====================================
  144.           Função buscar número
  145. =====================================*/
  146. struct No* buscar_numero(struct No* no_raiz, int num){
  147.     //Verificando se a árvore está vazia
  148.     if(no_raiz == NULL){
  149.         printf("A árvore está vazia ou número não encontrado!\n");
  150.         system("pause");
  151.         menu();
  152.     }
  153.     else{
  154.         while(no_raiz != NULL){
  155.             //Chamando de forma recursiva pela direita para encontrar o número
  156.             if(num > no_raiz->valor){
  157.                 no_raiz->direita = buscar_numero(no_raiz->direita, num);
  158.             }
  159.             //Chamando de forma recursiva pela esquerda para encontrar o número
  160.             else if(num < no_raiz->valor){
  161.                 no_raiz->direita = buscar_numero(no_raiz->esquerda, num);
  162.             }
  163.             else{
  164.                 //Encontrou o número
  165.                 printf("Número encontrado!\n");
  166.                 system("pause");
  167.                 menu();
  168.             }
  169.            
  170.         }      
  171.     }
  172. }
  173.  
  174. /* ====================================
  175.         Função mostrar em ordem
  176. =====================================*/
  177. void em_ordem(struct No* no_raiz){
  178.     //Esquerda Raiz Direita
  179.     if(no_raiz!=NULL){
  180.         em_ordem(no_raiz->esquerda);
  181.         printf("%d ", no_raiz->valor);
  182.         em_ordem(no_raiz->direita);
  183.     }
  184. }
  185.  
  186. /* ====================================
  187.       Função mostrar em pré-ordem
  188. =====================================*/
  189. void pre_ordem(struct No* no_raiz){
  190.     //Raiz Esquerda Direita
  191.     if(no_raiz!=NULL){
  192.         printf("%d ", no_raiz->valor);
  193.         pre_ordem(no_raiz->esquerda);
  194.         pre_ordem(no_raiz->direita);
  195.     }
  196. }
  197.  
  198. /* ====================================
  199.       Função mostrar em pós-ordem
  200. =====================================*/
  201. void pos_ordem(struct No* no_raiz){
  202.     //Esquerda Direita Raiz
  203.     if(no_raiz!=NULL){
  204.         pos_ordem(no_raiz->esquerda);
  205.         pos_ordem(no_raiz->direita);
  206.         printf("%d ", no_raiz->valor);
  207.  
  208.     }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement