Ir para conteúdo
Fórum Script Brasil
  • 0

Árvore bínaria


cristiano m

Pergunta

Organize a hierarquia dos setores de uma empresa através de uma árvore. Inicie o nodo raiz com o presidente e cria mais 5 níveis (diretor, gerente, vendedor, caixa e empacotador). Cada nível deve possuir no mínimo 2 nodos.

alguém poderia me dar uma ajudinha só não sei como faço para aparecer cada nodo dessa arvore, segue abaixo o código que estou tentado fazer.

//Operacoes sobre Arvore de busca binaria
#include <stdio.h>
#include <stdlib.h>
#include<time.h>


//Definicao da Arvore
typedef struct Raiz{
  char cargos;
  struct nodo * esquerda;
  struct nodo * direita;
}Raiz;

//Criacao de um nodo da arvore
Raiz * cria_elemento(char cargos){
  Raiz * novo = malloc(sizeof(Raiz));
  novo->cargos = cargos;
  novo->esquerda = NULL;
  novo->direita = NULL;
  return novo;
}

//Inclusao de um nodo na Arvore
void insere_folha(Raiz ** arv,char cargos){
   if (*arv == NULL){
     *arv = cria_elemento(cargos);
   }else{
   //se a informa??o ? menor que a informacao da arvore, insere a esquerda
     if(cargos < (*arv)->cargos){
        printf("Inserindo na Esquerda. \n");
        insere_folha(&(*arv)->esquerda, cargos);
     //se a informa??o ? maior que a informacao da arvore, insere a direita
     }else if (cargos > (*arv)->cargos){
        printf("Inserindo na Direita. \n");
        insere_folha(&(*arv)->direita, cargos);
     }
   }
}

//Caminhamento pre-ordem
void pre_ordem(Raiz * arv){
  if (arv != NULL) {
     printf("%c \n",arv->cargos);
     if (arv->esquerda != NULL){
        printf("Nodo Esquerdo. \n");
        pre_ordem(arv->esquerda);
     }
     if(arv->direita != NULL){
        printf("Nodo Direito. \n");
        pre_ordem(arv->direita);
     }
  }
}

//Caminhamento em-ordem
void em_ordem(Raiz * arv){
  if (arv != NULL){
     if (arv->esquerda != NULL){
       printf("Nodo Esquerdo. \n");
       em_ordem(arv->esquerda);
     }
     printf("%c \n", arv->cargos);
     if (arv->direita != NULL){
       printf("Nodo Direito. \n");
       em_ordem(arv->direita);
     }
  }
}

//Caminhamento pos-ordem
void pos_ordem(Raiz * arv){
  if (arv != NULL){
    if (arv->esquerda != NULL){
       printf("Nodo Esquerdo. \n");
       pos_ordem(arv->esquerda);
    }
    if (arv->direita != NULL){
       printf("Nodo direito. \n");
       pos_ordem(arv->direita);
    }
    printf("%c \n", arv->cargos);
  }
}

//Pesquisar um nodo
void pesquisar_nodo(Raiz * arv, int pesq)
{
  if (arv != NULL)
  {
     if (arv->cargos == pesq)
     {
        printf("Nodo encontrado %c. \n", arv->cargos);
        
     }else
     {
       if (pesq > arv->cargos)
       {
          printf("Pesquisando a direita. \n");
          pesquisar_nodo(arv->direita, pesq);
       }else
       {
          printf("Pesquisando a esquerda. \n");
          pesquisar_nodo(arv->esquerda, pesq);
       }
     }
  }else
  {
        printf("Nodo não encontrado\n");
        
  }
  
}

//Monta o menu do programa
void monta_menu(){

   printf("//////////////////////////////////////////////////////////////// \n");
   printf("Operacoes sobre Arvores \n");
   printf("Selecione a Opcao Desejada: \n");
   printf("   1 - Incluir Folha\n");
   printf("   2 - Caminhar Em Pre-Ordem \n");
   printf("   3 - Caminhar Em Ordem \n");
   printf("   4 - Caminhar Em Pos-Ordem \n");
   printf("   5 - Pesquisar nodos na Arvore \n");
   printf("   0 - Sair \n");
   printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n \n");
   printf("Qual a sua opcao: ");
}


int main()
{
    int i = 6;
    char cargos;
    
    Raiz * arv = NULL;
    printf("\n====LEGENDA=====  \n(P)-Presidente \n(D)-Diretor \n(G)-Gerente \n(V)-Vendedor \n(C)-Caixa \n(E)-Empacotador\n");
    
    insere_folha(&arv, 'p');
    insere_folha(&arv, 'd');
    insere_folha(&arv, 'g');
    insere_folha(&arv, 'v');
    insere_folha(&arv, 'c');
    insere_folha(&arv, 'e');
    
    em_ordem(arv);
    
    return 0;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...