Ir ao conteúdo
  • Cadastre-se

C++ Busca e Impressão em Árvore Binária


Ir à solução Resolvido por MarcoShadowbolt,

Posts recomendados

  • Solução

Fala mlkada, de boa ? 

Preciso fazer uma Árvore Binária, e nela tenho que conseguir buscar um número, mas esse é problema que estou tendo, sempre que digito o número que desejo procurar trava o prompt, queria que dessem uma olhada.

Eu também peguei na internet uma função de mostrar em ordem para ver se está sendo alocado, e está, mas depois de inserir vários números ou número inteiros maiores que 10 ele começa em um loop, alguém me dá uma força aí.

Eu também preciso imprimir todos os nós do tipo ''raiz'', alguém sabe como ?

Meu código está assim:

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

struct numero{
	int numero;
	struct numero* dir;
	struct numero* esq;
};
typedef struct numero ninteiro;

ninteiro* cria_arvore_vazia()
{
	return NULL;
}

ninteiro* criar_arvore(int numero, ninteiro* dir, ninteiro* esq)
{
	ninteiro* arvore = (ninteiro*) malloc(sizeof(ninteiro));
	arvore->numero = numero;
	arvore->dir = NULL;
	arvore->esq = NULL;
	return arvore;
}

ninteiro* inserir(ninteiro* arvore, int numero)
{
	if(arvore==NULL)
	{
		arvore=	criar_arvore(numero, NULL, NULL);
	}else if(numero < arvore->numero)
	{
		arvore->esq=inserir(arvore->dir, numero);
	}else
	{
		arvore->dir=inserir(arvore->dir, numero);
	}
	return arvore;
}

ninteiro* buscar(ninteiro* arvore, int numero)
{
    ninteiro* mostrar = NULL;
    if(arvore == NULL)
    {
    	return NULL;
	}
	
    if(arvore->numero == numero) 
    {
        mostrar = arvore;
    }
    if(numero < arvore->numero)
    {
        mostrar = buscar(arvore->esq, numero);
    }
    else
    {
        mostrar = buscar(arvore->dir, numero);
    }
    return mostrar;	
}

void imprimirordem(ninteiro* arvore) 
{
    if(arvore != NULL)
	{
        imprimirordem(arvore->esq);
        printf("Numero: %i\n", arvore->numero);
        imprimirordem(arvore->dir);
    }
}

int main() 
{
	int numero;
	ninteiro *arvore = cria_arvore_vazia();
	ninteiro *arvore_busca;
	int opcao = -5;
	do {
		printf("BEM VINDO AO MENU\n");
		printf("\nESCOLHA UMA DAS opções A SEGUIR:\n\n");
		printf("1 - INSERIR");
		printf("\n2 - BUSCAR NUMERO.");
		printf("\n3 - TESTE IMPRIMIR");
		printf("\n4 - SAIR\n");
		scanf("%d",&opcao);
		system("cls");
		
		switch(opcao) {
			case 1:
				{				
					printf("Insira um numero inteiro.\n");
					scanf ("%d",&numero);
					arvore=inserir(arvore, numero);
					break;
				}
			case 2:
				{	
					printf("Informe o numero que deseja buscar: ");
					scanf("%d", numero);
					arvore_busca = buscar(arvore, numero);
					printf("\nNumero: %d\n",arvore_busca->numero);
					break;												
				}
			case 3:
				{
					imprimirordem(arvore);
					break;
				}
			case 4:
				{
					printf("Obrigado pela preferência!! Volte sempre!!\n");
					exit(0);
					break;
				}	
			default: 
				{
					printf("Opcao invalida!!\n");
					printf("Por favor digite uma opcao valida\n");
					break;
				}
		}	
	} while(opcao != 4);
	return 0;
	system("pause");
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

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...