Advertisement
Guest User

Untitled

a guest
Sep 11th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5.  
  6. typedef struct arvore no;
  7.  
  8. struct arvore{
  9.   int valor;
  10.   no* esquerda;
  11.   no* direita;
  12.  
  13. };
  14.  
  15. no* criar_no(int item, no* esquerda, no* direita)
  16. {
  17.   no* novo_no=malloc(sizeof(no));
  18.   novo_no->valor=item;
  19.   novo_no->esquerda=esquerda;
  20.   novo_no->direita=direita;
  21.  
  22.   return novo_no;
  23. }
  24.  
  25.  void print_preorder(no * tree) {
  26.   if (tree)
  27.   {
  28.     printf(" %d ",tree->valor);
  29.     print_preorder(tree->esquerda);
  30.     print_preorder(tree->direita);
  31.   }
  32.  }
  33.  
  34.  
  35.  no* arvoredestr(char* str, int* pos)
  36. {
  37.     no* bt = NULL; //ponteiro para a arvore
  38.     int i = 0;
  39.     int numInt;       //numero do no (inteiro)
  40.     char numStr[1000];  //numero do no (string)
  41.  
  42.     while(str[*pos] == '(') { //ignora os parenteses abrindo
  43.         *pos += 1;
  44.     }
  45.  
  46.     if(str[*pos] == ')') { //se encontrar parentese fechando, retorna null
  47.         *pos += 1;         // pois o ponteiro eh nulo
  48.         return bt;
  49.     }
  50.     else {
  51.         while(str[*pos] != '(') {    //se for diferente de abre parenteses
  52.             numStr[i++] = str[*pos]; //le o numero string
  53.             *pos += 1;
  54.         }
  55.         numStr[i] = '\0'; //finalizando a string com '/0'
  56.         numInt = atoi(numStr); //converte o numero string para inteiro
  57.  
  58.         bt = criar_no(numInt, NULL, NULL); //cria um no com o numero inteiro
  59.         bt->esquerda = arvoredestr(str, pos);  //constroi a arvore para o no esquerdo
  60.         bt->direita = arvoredestr(str, pos); //constroi a arvore para o no direito
  61.     }
  62.     *pos += 1;
  63.     return bt; //retorna o ponteiro para a arvore
  64. }
  65.  
  66. procurar(no * avr, int procurado, int atual, int * soma)
  67. {
  68.     if(avr)
  69.     {
  70.         if(atual==procurado)
  71.         {
  72.             *soma+=avr->valor;
  73.         }
  74.  
  75.         procurar(avr->direita, procurado, atual+1, soma);
  76.         procurar(avr->esquerda, procurado, atual+1, soma);
  77.  
  78.     }
  79.  
  80. }
  81.  
  82. int main()
  83.  
  84. {
  85.     char * str;
  86.     int lvl;
  87.     scanf("%d", &lvl);
  88.     char lixo;
  89.     scanf("%c", &lixo);
  90.   str=malloc(sizeof(char)*1000);
  91.   fgets(str, 1000, stdin);
  92.   int tam=0, i=0, soma=0;
  93.     no* raiz= arvoredestr(str, &tam);
  94.     procurar(raiz, lvl, i, &soma);
  95.     printf("%d", soma);
  96.    
  97.    
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement