Retorna apenas o último dados inserido

23/03/2020

0

C

Olá pessoal,
Estou com um problema em meu código, ao realizar uma busca na árvore binária ele retorna apenas e somente o último dado inserido na árvore ou na Struct.
Preciso de um help para entender o que está rolando.

//Bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

//Struct de aluno
typedef struct {
int RU;
char Nome[50];
char Email[45];
} matricula;

//Struct de nós (node)
struct node {
matricula data;
struct node *left;
struct node *right;
};

//Struct para criar um novo nó (node) na árvore binária
struct node *newNode(matricula data) {
struct node* node = (struct node*) malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}

//Funcao de auxilio para ler numero sem o \n após pressionar ''enter'' do teclado
int readInt() {
int value;
scanf("%d", &value);
fgetc(stdin);
return value;
}

//Funcao para imprimir um aluno
void imprimeAluno(matricula aluno) {
printf("-----------------------------------------------\n");
printf(" RESULTADO DA BUSCA \n");
printf(" > RU: %d\n", aluno.RU);
printf(" > Nome: %s\n", aluno.Nome);
printf(" > Email: %s\n", aluno.Email);
printf("\n-----------------------------------------------\n");
}

//Funcao para encontrar alunos na árvore binária
struct node* encontraAluno(struct node* root, int RU) {
if (root == NULL) {
return NULL;
}

if (root->data.RU == RU) {
return root;
}

if (root->data.RU > RU) {
return encontraAluno(root->left, RU);
}
return encontraAluno(root->right, RU);
}

//Funcao para inserir um aluno na árvore binária
struct node* insereAluno(struct node* root, matricula aluno) {
if (root == NULL) {
return newNode(aluno);
}
//Se o RU na raiz for maior que o novo RU digitado, insere o dado a esquerda da arvore
if (root->data.RU > aluno.RU) {
root->left = insereAluno(root->left, aluno);
}
//Senão insere o dado a direita da arvore
root->right = insereAluno(root->right, aluno);
}

//Função principal
int main() {

//Altera a linguagem do programa para Português (para utilizar acentos)
setlocale(LC_ALL, "Portuguese");

//Struct inicia com ponteiro vazio (NULL)
struct node *root = NULL;

matricula a1, a2;
if (root == NULL) {
root = newNode(a1);
}
else {
//Aluno 1 2707055

root = newNode(a1);
a1.RU = 2804065;
strcpy (a1.Nome, "Ricardo Silva");
strcpy (a1.Email, "rick@silva.com.br");
insereAluno(root, a1);
}

if (root == NULL) {
root = newNode(a2);
}
else {
//Aluno 2 2812277

root = newNode(a2);
a2.RU = 2812277;
strcpy (a2.Nome, "Lúcia Eduarda da Mata");
strcpy (a2.Email, "lucia@eduarda.com");
insereAluno(root, a2);
}


/*
//Aluno 3 2010648
matricula a3;
root = newNode(a3);
a3.RU = 2010648;
strcpy (a3.Nome, "Eduardo Marques");
strcpy (a3.Email, "eduardo@marques.com");
insereAluno(root, a3);

//Aluno 4 2623392
matricula a4;
root = newNode(a4);
a4.RU = 2623392;
strcpy (a4.Nome, "João Marcos");
strcpy (a4.Email, "joao@joao.com");
insereAluno(root, a4);

//Aluno 5 2831603
matricula a5;
root = newNode(a5);
a5.RU = 2831603;
strcpy (a5.Nome, "José Ricardo");
strcpy (a5.Email, "ze@ricardo.com");
insereAluno(root, a5);

//Aluno 6 2835351
matricula a6;
root = newNode(a6);
a6.RU = 2835351;
strcpy (a6.Nome, "Vitoria Luiza");
strcpy (a6.Email, "vih@luiza.com");
insereAluno(root, a6);

//Aluno 7 2433315
matricula a7;
root = newNode(a7);
a7.RU = 2433315;
strcpy (a7.Nome, "Celso Paulo");
strcpy (a7.Email, "celso@paulo.com");
insereAluno(root, a7);

//Aluno 8 2929157
matricula a8;
root = newNode(a8);
a8.RU = 2929157;
strcpy (a8.Nome, "Adriele Pants");
strcpy (a8.Email, "adri@pants.com");
insereAluno(root, a8);


//Aluno 9 2531802
matricula a9;
root = newNode(a9);
a9.RU = 2531802;
strcpy (a9.Nome, "Cristiano Reck");
strcpy (a9.Email, "reck@cristiano.com");
insereAluno(root, a9);

//Aluno 10 2048330
matricula a10;
root = newNode(a10);
a10.RU = 2048330;
strcpy (a10.Nome, "Wilson José");
strcpy (a10.Email, "wilson@jose.com");
insereAluno(root, a10);
*/


//Realiza a busca pelo RU do aluno e apresenta os dados
//Caso não exista o programa apresenta possíveis mensagens de erro

printf("===============================================\n");
printf(" ALUNOS AVA - UNINTER\n");
printf("===============================================\n");
printf("\nRU do Aluno: ");
int RU = readInt();

//Caso não exista dados cadastrados na árvore
if (root == NULL) {
printf("\n-----------------------------------------------\n");
printf(" >>> NAO HÁ ALUNOS CADASTRADOS! <<<");
printf("\n-----------------------------------------------\n");
}

//Caso não encontre o RU digitado na busca
else {
struct node *aluno = encontraAluno(root, RU);

if (aluno == NULL) {
printf("-----------------------------------------------\n");
printf(" >>> ALUNO NÃO ENCONTRADO! <<<");
printf("\n-----------------------------------------------\n");
}

//Caso exista o RU cadastrado imprime na tela os dados
else {
imprimeAluno(aluno->data);
}
}
}
Alison

Alison

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar