Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
88lucas

Inserir nome e deletar nó - Arvore binária

Recommended Posts

Alguém pode me ajudar a inserir além do numero que seria a idade uma nome na árvore, e também a deletar.



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int quantidadeNos = 0;

typedef struct _no{
int chave;
int cont;

struct _no *esq, *dir, *pai;
}no;

no* auxPai = NULL;

void vaziaArvore(no *raiz){
if (raiz == NULL){
printf(" A arvore esta vazia\n\n");
}
else {
printf(" A arvore nao esta vazia\n\n");
}
}

void insere (int x, no **p){

if (*p==NULL){
*p=(no *)malloc(sizeof(no));
(*p)->chave=x;
(*p)->dir=NULL;
(*p)->esq=NULL;
(*p)->pai = auxPai;
(*p)->cont=0;
(*p)->cont++;
}
else{
if (x<(*p)->chave){
if((*p)->esq == NULL)
auxPai = *p;
insere(x, &(*p)->esq);
}
if(x>(*p)->chave){
if((*p)->dir == NULL)
auxPai = *p;
insere(x, &(*p)->dir);
}
if(x == (*p)->chave){
(*p)->cont++;
return;
}
}
}



no* busca(no *arvore, int x){
if (arvore == NULL)
return NULL;
if (x == arvore->chave)
return arvore;
if (x < arvore->chave)
return busca(arvore->esq, x);
else
return busca(arvore->dir, x);
}



void consultarDetalhes(no* raiz){
int num;
no* aux;
printf("Digite o numero procurado: ");
scanf("%d", &num);
aux = busca(raiz, num);
if (aux == NULL)
printf("Nao encontrado!\n");
else{
printf("Encontrado!\n");
printf("O numero %d foi repetido %d vezes.\n", num, aux->cont);
if(aux->pai == NULL){
printf("O No que contem o valor %d e a raiz da arvore.\n", num);
if(aux->esq != NULL)
printf("Valor contido no No filho a esquerda: %d\n", aux->esq->chave);
if(aux->dir != NULL)
printf("Valor contido no No filho a direito: %d\n", aux->dir->chave);
}
if((aux->esq == NULL)&&(aux->dir == NULL)&&(aux->pai != NULL)){
printf("O No que contem o valor %d e uma folha da arvore.\n", num);
printf("Valor contido no No pai: %d\n", aux->pai->chave);
}
if(((aux->esq != NULL)||(aux->dir != NULL))&&(aux->pai != NULL)){
printf("O No que contem o valor %d e um no interno a arvore.\n", num);
printf("Valor contido no No pai: %d\n", aux->pai->chave);
if(aux->esq != NULL)
printf("Valor contido no No filho a esquerda: %d\n", aux->esq->chave);
if(aux->dir != NULL)
printf("Valor contido no No filho a direito: %d\n", aux->dir->chave);
}
}
}


void maiorValor(no* raiz){
if((raiz->dir != NULL)&&(raiz->dir->chave > raiz->chave))
maiorValor(raiz->dir);
else
printf("Maior Valor: %d\n", raiz->chave);
}

void menorValor(no* raiz){
if((raiz->esq != NULL)&&(raiz->esq->chave < raiz->chave))
menorValor(raiz->esq);
else
printf("Menor Valor: %d\n", raiz->chave);
}


int menu(){
int op;
printf("\n>>>>>>>>>>MENU<<<<<<<<<<\n\n");
printf("1 - Consultar lista\n");
printf("2 - Inserir valor\n");
printf("3 - Procurar numero\n");
printf("4 - Consultar maior valor\n");
printf("5 - Consultar menor valor\n");
printf("6 - Sair\n\n>>>>>>>>>>MENU<<<<<<<<<<\n\n\n");
printf("Digite sua opcao: ");
scanf("%d", &op);
return op;
}


int main(){
int n,a,b;
no *raiz, *aux;
raiz = NULL;
int opcao;

while(opcao!=12){
system("cls");
opcao = menu();
switch(opcao){

case 1:
system("cls");
printf("\n>>>>>>>>>>>>><<<<<<<<<<<<<\n\n");
vaziaArvore(raiz);
printf(">>>>>>>>>>>>><<<<<<<<<<<<<\n\n");
getch();
break;
case 2:
system("cls");
printf("\n>>>>>>>>>>>>><<<<<<<<<<<<<\n\n");
printf("Digite -1 para terminar\n");
printf("\n>>>>>>>>>>>>><<<<<<<<<<<<<\n\n");
do{
printf("Digite um numero: ");
scanf("%d", &n);
if(n!=-1){
insere(n, &raiz);
}
}while (n!=-1);
system("cls");

break;

case 3:
system("cls");
consultarDetalhes(raiz);
getch();
break;
case 4:
system("cls");
maiorValor(raiz);
getch();
break;
case 5:
system("cls");
menorValor(raiz);
getch();
break;
case 6:
exit(0);
break;

default :
system("cls");
printf("opcao nao existe! tente novamente");
getch();
break;
}

}

system("PAUSE");
return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×