Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <limits.h>
- typedef struct arvore no;
- struct arvore{
- int valor;
- no* esquerda;
- no* direita;
- };
- no* criar_no(int item, no* esquerda, no* direita)
- {
- no* novo_no=malloc(sizeof(no));
- novo_no->valor=item;
- novo_no->esquerda=esquerda;
- novo_no->direita=direita;
- return novo_no;
- }
- void print_preorder(no * tree) {
- if (tree)
- {
- printf(" %d ",tree->valor);
- print_preorder(tree->esquerda);
- print_preorder(tree->direita);
- }
- }
- no* arvoredestr(char* str, int* pos)
- {
- no* bt = NULL; //ponteiro para a arvore
- int i = 0;
- int numInt; //numero do no (inteiro)
- char numStr[1000]; //numero do no (string)
- while(str[*pos] == '(') { //ignora os parenteses abrindo
- *pos += 1;
- }
- if(str[*pos] == ')') { //se encontrar parentese fechando, retorna null
- *pos += 1; // pois o ponteiro eh nulo
- return bt;
- }
- else {
- while(str[*pos] != '(') { //se for diferente de abre parenteses
- numStr[i++] = str[*pos]; //le o numero string
- *pos += 1;
- }
- numStr[i] = '\0'; //finalizando a string com '/0'
- numInt = atoi(numStr); //converte o numero string para inteiro
- bt = criar_no(numInt, NULL, NULL); //cria um no com o numero inteiro
- bt->esquerda = arvoredestr(str, pos); //constroi a arvore para o no esquerdo
- bt->direita = arvoredestr(str, pos); //constroi a arvore para o no direito
- }
- *pos += 1;
- return bt; //retorna o ponteiro para a arvore
- }
- procurar(no * avr, int procurado, int atual, int * soma)
- {
- if(avr)
- {
- if(atual==procurado)
- {
- *soma+=avr->valor;
- }
- procurar(avr->direita, procurado, atual+1, soma);
- procurar(avr->esquerda, procurado, atual+1, soma);
- }
- }
- int main()
- {
- char * str;
- int lvl;
- scanf("%d", &lvl);
- char lixo;
- scanf("%c", &lixo);
- str=malloc(sizeof(char)*1000);
- fgets(str, 1000, stdin);
- int tam=0, i=0, soma=0;
- no* raiz= arvoredestr(str, &tam);
- procurar(raiz, lvl, i, &soma);
- printf("%d", soma);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement