Ir ao conteúdo
  • Cadastre-se

Inserir nome e deletar nó - Arvore binária


88lucas

Posts recomendados

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;

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...