Buscar

AVA2 - ESTRUTURA DE DADOS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE VEIGA DE ALMEIDA – UVA 
 
 
 
 
 
 
 
AVA 2 – ESTRUTURA DE DADOS 
 
 
 
 
 
 
 
 
 
 
ALUNO: RAFAEL DA SILVA ORTOLÁ 
MATRÍCULA: 20211303306 
PROFESSOR: PAULO MÁRCIO SOUZA FREIRE 
 
 
 
 
Questão 1: As árvores binárias de busca são estruturas de dados de árvore 
binária baseada em nós em que todos os nós da subárvore esquerda possuem 
um valor numérico inferior ao nó raiz e todos os nós da subárvore direita 
possuem um valor superior ao nó raiz (FORBELLONE; EBERSPACHER, 
2005). 
A Empresa Renalf S/A solicita a você, membro da equipe de programadores de 
computador em linguagem C, que desenvolva um programa que seja capaz de 
manipular uma árvore binária (inclusão e remoção de nós), admitindo a escolha 
dos três processos de busca em profundidade. 
 
 
Procedimentos para elaboração do TD 
Nesse contexto, escreva um programa em linguagem C que apresente um 
menu de opções que possibilite executar as seguintes opções: 
* * * MENU DE OPÇÕES * * * 
1. Incluir nó. 
2. Remover nó. 
3. Buscar pré-ordem. 
4. Buscar em ordem. 
5. Buscar pós-ordem. 
Opção [0 para encerrar] 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
RESPOSTA: 
/****************************************************************************
** 
 
 Online C Compiler. 
 Code, Compile, Run and Debug C program online. 
Write your code in this editor and press "Run" button to compile and execute it. 
 
*****************************************************************************
**/ 
 
#include<stdio.h> 
 
typedef struct NO* ArvoreBinaria; 
 
struct NO { 
 
 int info; 
 
 struct NO *esquerda; 
 
 struct NO *direita; 
 
}; 
 
 
 
ArvoreBinaria* cria_Arvorebinaria() { 
 
 ArvoreBinaria* raiz = (ArvoreBinaria*) malloc(sizeof(ArvoreBinaria)); 
 
 if(raiz != NULL){ 
 
 *raiz = NULL; 
 
 } 
 
 return raiz; 
 
} 
 
 
 
 
 
void libera_ArvoreBinaria(ArvoreBinaria* raiz){ 
 
 if(raiz == NULL) return ; 
 
 liberaNO(*raiz); 
 
 free(raiz); 
 
} 
 
void liberaNO(struct NO* no){ 
 
 if(no == NULL) return; 
 
 liberaNO(no->esquerda); 
 
 liberaNO(no->direita); 
 
 free(no); 
 
 no = NULL; 
 
} 
 
 
 
int incluirNo(ArvoreBinaria* raiz, int valor){ 
 
 if(raiz == NULL) return 0; 
 
 struct NO* novo; 
 
 novo = (struct NO*) malloc(sizeof(struct NO)); 
 
 if(novo == NULL) return 0; 
 
 novo->info = valor; 
 
 novo->direita = NULL; 
 
 novo->esquerda = NULL; 
 
 if(*raiz == NULL){ 
 
 *raiz = novo; 
 
 }else{ 
 
 struct NO* atual = *raiz; 
 
 struct NO* anterior = NULL; 
 
 while(atual != NULL){ 
 
 anterior = atual; 
 
 if(valor == atual->info){ 
 
 free(novo); 
 
 return 0; 
 
 } 
 
 if(valor > atual->info){ 
 
 atual = atual->info; 
 
 }else{ 
 
 atual = atual->esquerda; 
 
 } 
 
 } 
 
 if(valor > anterior->info){ 
 
 anterior->direita = novo; 
 
 }else{ 
 
 anterior->esquerda = novo; 
 
 } 
 
 } 
 
 return 1; 
 
} 
 
 
 
 
 
struct NO* removeAtual(struct NO* atual){ 
 
 struct NO *no1, *no2; 
 
 if(atual->esquerda == NULL){ 
 
 no2 = atual->direita; 
 
 free(atual); 
 
 return no2; 
 
 } 
 
 no1 = atual; 
 
 no2 = atual->esquerda; 
 
 while(no2->direita != NULL){ 
 
 no1 = no2; 
 
 no2 = no2->direita; 
 
 } 
 
 if(no1 != atual){ 
 
 no1->direita = no2->esquerda; 
 
 no2->esquerda = atual->esquerda; 
 
 } 
 
 no2->direita = atual->direita; 
 
 free(atual); 
 
 return no2; 
 
}; 
 
void removerNo(ArvoreBinaria* raiz, int valor){ 
 
 if(raiz == NULL) return 0; 
 
 struct NO* atual = *raiz; 
 
 struct NO* anterior = NULL; 
 
 while(atual != NULL){ 
 
 if(valor == atual->info){ 
 
 *raiz = removeAtual(atual); 
 
 }else{ 
 
 if(anterior->direita == atual){ 
 
 anterior->direita = removeAtual(atual); 
 
 }else{ 
 
 anterior->esquerda = removeAtual(atual); 
 
 } 
 
 } 
 
 return 1; 
 
 } 
 
 if(valor > atual->info){ 
 
 atual = atual->info; 
 
 }else{ 
 
 atual = atual->esquerda; 
 
 } 
 
} 
 
 
 
 
 
int preOrdem(ArvoreBinaria *raiz){ 
 
 if(raiz == NULL) return ; 
 
 if(*raiz != NULL){ 
 
 printf("%d\n", (*raiz)->info); 
 
 preOrdem(&((*raiz)->esquerda)); 
 
 preOrdem(&((*raiz)->direita)); 
 
 } 
 
} 
 
int emOrdem(ArvoreBinaria *raiz){ 
 
 if(raiz == NULL) return; 
 
 if(*raiz != NULL){ 
 
 emOrdem(&((*raiz)->esquerda)); 
 
 printf("%d\n", (*raiz)->info); 
 
 emOrdem(&((*raiz)->direita)); 
 
 } 
 
} 
 
int posOrdem(ArvoreBinaria *raiz){ 
 
 if(raiz == NULL) return; 
 
 if(*raiz != NULL){ 
 
 posOrdem(&((*raiz)->esquerda)); 
 
 posOrdem(&((*raiz)->direita)); 
 
 printf("%d\n", (*raiz)->info); 
 
 } 
 
} 
 
void main(){ 
 
 int valor; 
 
 int opcao; 
 
 ArvoreBinaria *raiz = cria_Arvorebinaria(); 
 
 while(1){ 
 
 printf("** MENU DE OPÇÕES **\n"); 
 
 printf("1 - Incluir nó.\n"); 
 
 printf("2 - Remover nó.\n"); 
 
 printf("3 - Buscar em pré-ordem.\n"); 
 
 printf("4 - Buscar em ordem.\n"); 
 
 printf("5 - Buscar pós-ordem.\n"); 
 
 printf("0 - Cancelar.\n"); 
 
 printf("Digite a opção: "); 
 
 scanf("%d", &opcao); 
 
 switch(opcao){ 
 
 case 1: 
 
 printf("Função incluir nó\n"); 
 
 printf("Digite um valor numérico: "); 
 
 scanf("%d", &valor); 
 
 incluirNo(raiz,valor); 
 
 break; 
 
 case 2: 
 
 printf("Função remover nó\n"); 
 
 printf("Digite um valor numérico: "); 
 
 scanf("%d", &valor); 
 
 removerNo(raiz,valor); 
 
 break; 
 
 case 3: 
 
 printf("Função Buscar em pré-ordem \n"); 
 
 preOrdem(raiz); 
 
 break; 
 
 case 4: 
 
 printf("Função Buscar em ordem \n"); 
 
 emOrdem(raiz); 
 
 break; 
 
 case 5: 
 
 printf("Função Buscar pós-ordem \n"); 
 
 posOrdem(raiz); 
 
 break; 
 
 default: 
 
 printf("Saindo...\n"); 
 
 libera_ArvoreBinaria(raiz); 
 
 break; 
 
 } 
 
 } 
 
}

Outros materiais