Ir ao conteúdo

oAnfibio

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

2
  1. //Bibliotecas #include <stdio.h> #include <stdlib.h> //Constantes #define tamanho 100 #define E 0 #define D 1 #define R -1 //Estrutura struct str_no { char dado; int esquerda; int direita; int pai; }; //Variáveis struct str_no arvore[tamanho]; int lado, indice = 0; int opt = -1; char pai, no; //Prototipação void arvore_insere(int pai, char dado, int lado); int arvore_procura(char dado); void menu_mostrar(void); void preOrdem(struct str_no* raiz); //Função principal int main(void) { int temp; do { menu_mostrar(); scanf("%d",&opt); switch (opt){ case 1: printf("Digite o valor do PAI:\n"); scanf(" %c",&pai); printf("pai: %c\n",pai); printf("Digite o valor do NO:\n"); scanf(" %c",&no); printf("no: %c\n",no); printf("Digite o lado da subarvore (E=%d/D=%d/R=%d):\n", E,D,R); scanf(" %d",&lado); printf("lado: %d\n",lado); temp = arvore_procura(pai); arvore_insere(temp, no, lado); break; case 2: printf("Digite o valor do NO:\n"); scanf(" %c",&no); temp = arvore_procura(no); printf("No %c\nFilho Esquerda: %c\nFilho Direita: %c\n\n", arvore[temp].dado, arvore[arvore[temp].esquerda].dado, arvore[arvore[temp].direita].dado); system("read -p 'Pressione Enter para continuar...' var"); break; case 3: preOrdem(&arvore[0]); system("read -p 'Pressione Enter para continuar...' var"); break; } }while (opt != 0); system("read -p 'Pressione Enter para continuar...' var"); return 0; } //Inserir nó void arvore_insere(int pai, char dado, int lado) { switch (lado){ case E: arvore[pai].esquerda = indice; arvore[indice].dado = dado; arvore[indice].pai = pai; arvore[indice].esquerda = -1; arvore[indice].direita = -1; indice++; break; case D: arvore[pai].direita = indice; arvore[indice].dado = dado; arvore[indice].pai = pai; arvore[indice].esquerda = -1; arvore[indice].direita = -1; indice++; break; case R: arvore[indice].dado = dado; arvore[indice].pai = -1; arvore[indice].esquerda = -1; arvore[indice].direita = -1; indice++; break; } } //Desenha o menu na tela void menu_mostrar(void) { system("clear"); for (int i = 0; i < indice; i++) { printf("| %c ",arvore[i].dado); } printf("\n1 - Inserir um NO na arvore"); printf("\n2 - Pesquisar um NO na arvore"); printf("\n3 - Imprimir o percurso pré-ordem da Arvore Binaria"); printf("\n0 - Sair...\n\n"); } //Procura nó int arvore_procura(char dado) { if(indice != 0){ for(int i = 0; i < indice; i++) { if (arvore[i].dado == dado) { return i; } } } return 0; } void preOrdem(struct str_no* raiz){ if(raiz->dado != -1){ printf("\n%c",raiz->dado); preOrdem(&arvore[arvore_procura(raiz->esquerda+'0')]); preOrdem(&arvore[arvore_procura(raiz->direita+'0')]); } } Após a inserção de alguns nodes na arvore, ao executar a opção 3 no menu, o preOrdem loopa infinitamente no node raiz da árvore. Eu simplesmente não sei mais o que eu fazer. Quem poder me dar uma luz, agradeço bastante.
  2. Se alguém conseguir gerar o código-solução para o problema em questão seria de grande utilidade. Faço um pixzão de 20 reais pra primeira pessoa* que conseguir postar um código que compila corretamente e funciona como o esperado. Valendo!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!