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

lista encadeada (arvore binaria de busca a partir da lista)


carlossilva

Pergunta

Amigos sou novato no forúm, já procurei algums exemplos aqui no forum porém não tive muito sucesso.

a pergunta é

Atividade 3

Escreva um programa que leia várias informações de Alunos para uma lista encadeada. Em

seguida crie uma árvore binária de busca a partir da lista. O programa deve permitir que se

faça consultas às informações da lista a partir da busca realizada na árvore.

tentei usar este código como base porém não está correto, alguém pode me ajudar? obrigado pela atenção,

Abraço

#include<stdio.h>
#include<conio.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
void binsearchtree(struct node **,int);
void delatgivendata(struct node **,int);
inorder(struct node *);
preorder(struct node *);
postorder(struct node *);
void main()
{
 int data,choice;
 struct node *p;
 p=NULL;
 clrscr();
    while(1)
    {
     printf("\n1.Add node to the binary search tree");
     printf("\n2.Deletion at given data:");
     printf("\n3.Exit");
     printf("\nEnter the choice");
     scanf("%d",&choice);
        switch(choice)
        {
         case 1: printf("\nEnter the data");
             scanf("\n%d",&data);
             binsearchtree(&p,data);
             printf("\n The inorder traversals are:");
             printf("\n");
             inorder(p);
             printf("\n The preorder traversals are:");
             printf("\n");
             preorder(p);
             printf("\nThe post order traversals are:");
             printf("\n");
             postorder(p);
             break;
         case 2: printf("\n Please enter the data where you  want deleted");
             scanf("%d",&data);
             delatgivendata(&p);
             printf("\nThe inorder traversals are :");
             inorder(p);
             break;
         case 3:exit(0);
         }
     }
 }

void binsearchtree(struct node **q,int data)
{
 struct node *temp,*r;
 r=*q;
 temp=(struct node*)malloc(sizeof(struct node));
 temp->data=data;
 temp->left=NULL;
 temp->right=NULL;
    if(r==NULL)
    {
     *q=temp;
     (*q)->left=temp->left;
     (*q)->right=temp->right;
    }
    else
    {
        if(r->data==data)
         printf("\nInvalid input\n");
        while(1)
        {
            if(r->data>data)
            {
                if(r->left==NULL)
                {
                 r->left=temp;
                 break;
                }
                 r=r->left;

             }
             else
             {
                if(r->right==NULL)
                {
                 r->right=temp;
                 break;
                }
                 r=r->right;
             }
        }
    }
}
void delatgivendata(struct node **q,int data)
{
struct node *r;
r=*q;

}

inorder(struct node *q)
{
 struct node *r;
 r=q;
    if(r==NULL)
    return 0;
    else
    {
     inorder(r->left);
     printf("%d\t",r->data);
     inorder(r->right);
    }
}

preorder(struct node *q)
{
 struct node *r;
 r=q;
    if(r==NULL)
    return 0;
    else
    {
     printf("%d\t",r->data);
     preorder(r->left);
     preorder(r->right);
    }
}

postorder(struct node *q)
{
 struct node *r;
 r=q;
    if(r==NULL)
    return 0;
    else
    {
     postorder(r->left);
     postorder(r->right);
     printf("%d\t",r->data);
    }
}

Editado por Durub
Adicionar tags code [Durub]
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

o meu professor disse que está certo, só que não é exatamente o que a questão quer.

você tem algum exemplo de arvore binaria de busca com lista encadeada?

valeu pela força.

agora, será que está certo?

struct avl
{ struct avl *esq;
struct avl *dir;
char info;
};
typedef struct avl Arvore;
void incluir(void);
void consulta(void);
int buscaBinaria(Arvore *p,char z);
Arvore *criar(char c,Arvore *esq,Arvore *dir);
Arvore *raiz;
Arvore *arvore;
Arvore *criar (char c,Arvore *esq,Arvore *dir)
{
Arvore *p;
p=(Arvore*)malloc(sizeof(Arvore));
p->info=c;
p->esq=esq;
p->dir=dir;
return p;
}
void incluir (void)
{
int resp=1;
char s[30];
int codigo[10];
int nota1,nota2;
float media;
while (resp==1)
{
printf("Escreva o nome do aluno.: ");
scanf("%s", &s);
printf("\nDigite o codigo do aluno.: ");
scanf("%d", &codigo);
printf("\nDigite a nota 1 do aluno.: ");
scanf("%d", &nota1);
printf("\nDigite a nota 2 do aluno.: ");
scanf("%d", &nota2);
media=nota1+nota2/2;
}
if (media>7)
{
printf("Aluno aprovado");
}
else
{
printf("Aluno reprovado");
}
int main(int argc, char *argv[])
{ int op;
raiz=NULL;
for (;;)
{
system ("cls");
printf("\n\n 1.Insere Aluno");
printf("\n\n 2.consulta Aluno");
printf("\n\n 3.Busca Aluno");
system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Ahh, agora acho que entendi o enunciado...

Primeiro você pega todos os dados e coloca numa lista encadeada.

Depois da lista completa você cria uma árvore binária.

As pesquisas são feitas na árvore binária.

Em qual parte você está com dúvidas?

PS: Cuidado com o termo AVL, AVL é um tipo de árvore binária, que por sinal o primeiro post NÃO implementou.

Editado por p4t0X
Link para o comentário
Compartilhar em outros sites

  • 0

Então, o primeiro passo é criar a lista encadeada...

Normalmente ela é desse tipo:

struct noLista {
    int valor;
    struct noLista *proximo;
};
Criamos uma refêrencia para a lista assim:
struct noLista *lista = NULL;
Para adicionar um elemento ficaria mais ou menos assim:
struct noLista *aux;
aux = lista;
//Percorre a lista até o ultimo elemento
while( aux->proximo != NULL ){
    aux = aux->proximo;
}

struct noLista *novoElemento = (struct noLista*) malloc( sizeof( struct noLista ) );
novoElemento->valor = 1231;
novoElemento->proximo = NULL;//Isso indica que esse vai ser o ultimo elemento da lista

//Adiciona o elemento na lista
aux->proximo = novoElemento;

A partir da lista criada, criamos a árvore binária.

Tente implementar a lista e posta aí!

Link para o comentário
Compartilhar em outros sites

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