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

Arvore Binária de Busca


Sakomura

Pergunta

Olá pessoal , tudo bem? É o seguinte, criei uma arvore binaria que armazena dados de veiculos (placa , modelo , marca etc...) e gostaria de saber como eu posso imprimir os nodos por ordem crescente de PLACA. Eu criei um vetor de Strings e tentei percorrer a arvore inteira e colocar todas as placas nesse vetor e assim ordená-lo. Mas devo estar fazendo muita coisa errada hahahha. A verdade é que eu não sei como eu coloco dados de uma arvore num vetor. Agradeço a atenção.

case 3:
vet = (char**) malloc (sizeof(char*)*qtd);
                for (i = 0; i < qtd ; i++)
                    vet[i] = (char*) malloc (sizeof(char)*10);

                emOrdem(avl , vet , 0, qtd);
                ordenaVetor(vet , qtd);
                //imprimeVetor(vet, qtd);
                //for(aux=0; aux < qtd; aux++){
                    nodo = Pesquisa_ABP(avl, vet, 1);
                    exibeAVL(nodo);
                //}
                liberaMatriz (vet ,  qtd);
                fflush(stdin);
                getchar();
                break;

FUNÇÔES:

AVL *Pesquisa_ABP (AVL *avl, char vet[][10], int ps)
{
     if (avl == NULL)
        return NULL;

     if(strcmp(avl->reg.Info.placa, vet[ps]) == 0)
            return avl;

    else  if (strcmp(avl->reg.Info.placa, vet[ps]) > 0)
               return Pesquisa_ABP(avl->Esq, vet , ps);

           else if (strcmp(avl->reg.Info.placa , vet[ps]) < 0)
                    return Pesquisa_ABP(avl->Dir, vet , ps);
}

void exibeAVL (AVL *avl){
    if (avl == NULL)
        return;

    printf("Placa: %s\n",avl->reg.Info.placa);
    printf("Chassi: %s\n",avl->reg.Info.chassi);
    printf("Marca: %s\n",avl->reg.Info.marca);
    printf("Modelo: %s\n",avl->reg.Info.modelo);
    printf("Quantidade de portas: %d\n",avl->reg.Info.portas);
    printf("Nome proprietario: %s\n",avl->reg.Info.proprietario);
    printf("Cpf: %s\n",avl->reg.Info.cpf_proprietario);
    printf("Telefone proprietario: %s\n",avl->reg.Info.telefone);
    printf("=========================\n");

}

void emOrdem (AVL *avl , char vet[][10], int i,int qtd){
    if (avl != NULL){
        strcpy(vet[i],avl->reg.Info.placa);
        //vet[i] = avl->reg.Chave;
        if( i == qtd )
            return;

        emOrdem(avl->Esq, vet , i+1 , qtd);
        emOrdem(avl->Dir, vet , i+1, qtd);
    }
}


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,2k
    • Posts
      652k
×
×
  • Criar Novo...