Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Cada nó armazena três informações:
  5.    nesse caso um número (num),
  6.    ponteiro para subárvore à direita (sad)
  7.    e ponteiro para subárvore à esquerda (sae).*/
  8. typedef struct tree
  9. {
  10.   int num;
  11.   struct tree* sad;
  12.   struct tree* sae;
  13. } Tree;
  14.  
  15. /* A estrutura da árvore é representada por um ponteiro
  16.    para o nó raiz. Com esse ponteiro, temos acesso aos
  17.    demais nós. */
  18.  
  19. / Função que cria uma árvore /
  20. Tree* createTree()
  21. {
  22.   /* Uma árvore é representada pelo endereço do nó raiz,
  23.      essa função cria uma árvore com nenhum elemento,
  24.      ou seja, cria uma árvore vazia, por isso retorna NULL. */
  25.   return NULL;
  26. }
  27.  
  28. / Função que verifica se uma árvore é vazia /
  29. int treeIsEmpty(Tree* t)
  30. {
  31.   / Retorna 1 se a árvore for vazia e 0 caso contrário /
  32.   return t == NULL;
  33.  
  34. }
  35.  
  36. / Função que mostra a informação da árvore /
  37. void preordem(Tree* t)
  38. {
  39.   / Essa função imprime os elementos de forma recursiva /
  40.  
  41.   printf("<"); / notação para organizar na hora de mostrar os elementos /
  42.   if(!treeIsEmpty(t)) / se a árvore não for vazia... /
  43.   {
  44.     / Mostra os elementos em pré-ordem /
  45.     printf("%d ", t->num); / mostra a raiz /
  46.     preordem(t->sae); / mostra a sae (subárvore à esquerda) /
  47.     preordem(t->sad); / mostra a sad (subárvore à direita) /
  48.   }
  49.   printf(">"); / notação para organizar na hora de mostrar os elementos /
  50. }
  51.  
  52. void posordem(Tree* t){
  53.     printf("<"); / notação para organizar na hora de mostrar os elementos /
  54.   if(!treeIsEmpty(t)) / se a árvore não for vazia... /
  55.   {
  56.     / Mostra os elementos em pré-ordem /
  57.     posordem(t->sae); / mostra a sae (subárvore à esquerda) /
  58.     posordem(t->sad); / mostra a sad (subárvore à direita) /
  59.     printf("%d ", t->num); / mostra a raiz /
  60.   }
  61.   printf(">"); / notação para organizar na hora de mostrar os elementos /
  62. }
  63.  
  64. void inordem (Tree* t){
  65.     / Essa função imprime os elementos de forma recursiva /
  66.  
  67.   printf("<"); / notação para organizar na hora de mostrar os elementos /
  68.   if(!treeIsEmpty(t)) / se a árvore não for vazia... /
  69.   {
  70.     / Mostra os elementos em pré-ordem /
  71.     inordem(t->sae); / mostra a sae (subárvore à esquerda) /
  72.     printf("%d ", t->num); / mostra a raiz /
  73.     inordem(t->sad); / mostra a sad (subárvore à direita) /
  74.   }
  75.   printf(">"); / notação para organizar na hora de mostrar os elementos /
  76. }
  77.  
  78. / Função que insere um dado na árvore /
  79. void insertTree(Tree** t, int num)
  80. {
  81.   / Essa função insere os elementos de forma recursiva /
  82.   if(*t == NULL)
  83.   {
  84.     t = (Tree*)malloc(sizeof(Tree)); / Aloca memória para a estrutura */
  85.     (t)->sae = NULL; / Subárvore à esquerda é NULL */
  86.     (t)->sad = NULL; / Subárvore à direita é NULL */
  87.     (t)->num = num; / Armazena a informação */
  88.   } else {
  89.     if(num < (t)->num) / Se o número for menor então vai pra esquerda */
  90.     {
  91.       / Percorre pela subárvore à esquerda /
  92.       insertTree(&(*t)->sae, num);
  93.     }
  94.     if(num > (t)->num) / Se o número for maior então vai pra direita */
  95.     {
  96.       / Percorre pela subárvore à direita /
  97.       insertTree(&(*t)->sad, num);
  98.     }
  99.   }
  100. }
  101.  
  102. / Função que verifica se um elemento pertence ou não à árvore /
  103. int isInTree(Tree* t, int num) {
  104.  
  105.   if(treeIsEmpty(t)) { / Se a árvore estiver vazia, então retorna 0 /
  106.     return 0;
  107.   }
  108.  
  109.   / O operador lógico || interrompe a busca quando o elemento for encontrado /
  110.   return t->num==num || isInTree(t->sae, num) || isInTree(t->sad, num);
  111. }
  112.  
  113. int main()
  114. {
  115.   Tree t = createTree(); / cria uma árvore */
  116.   int op,n;
  117.   while (1){
  118.     printf ("\nMenu");
  119.     printf ("\n\n 1. Insere");
  120.     printf ("\n 2. Exibe PRE-FIXADO ");
  121.     printf ("\n 3. Exibe INFIXADO ");
  122.     printf ("\n 4. Exibe POS-FIXADO ");
  123.     printf ("\n 5. Sair");
  124.     printf ("\n\n Entre a sua opcao: ");
  125.     scanf ("%d",&op);
  126.     fflush(stdin);
  127.     if(op==1){
  128.         scanf("%d", &n);
  129.         insertTree(&t, n);
  130.     }
  131.     else if(op==2){
  132.         preordem(t);
  133.     }
  134.     else if(op==3){
  135.         inordem(t);
  136.     }
  137.     else if(op==4){
  138.         posordem(t);
  139.     }
  140.     else if(op==5){
  141.         break;
  142.     }
  143.   }
  144.  
  145.  
  146.   if(treeIsEmpty(t)) / Verifica se a árvore está vazia /
  147.   {
  148.     printf("\n\nArvore vazia!!\n");
  149.   } else {
  150.     printf("\n\nArvore NAO vazia!!\n");
  151.   }
  152.  
  153.   if(isInTree(t, 15)) { / Verifica se o número 15 pertence a árvore /
  154.     printf("\nO numero 15 pertence a arvore!\n");
  155.   } else {
  156.      printf("\nO numero 15 NAO pertence a arvore!\n");
  157.   }
  158.  
  159.   if(isInTree(t, 22)) { / Verifica se o número 22 pertence a árvore /
  160.     printf("\nO numero 22 pertence a arvore!\n\n");
  161.   } else {
  162.      printf("\nO numero 22 NAO pertence a arvore!\n\n");
  163.   }
  164.  
  165.   free(t); / Libera a memória alocada pela estrutura árvore /
  166.  
  167.   return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement