TADS:Estrutura de Dados: codigos1502
De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
#include<stdio.h>
#include<stdlib.h>
typedef struct No{
int dado;
struct No *esquerdo;
struct No *direito;
} No;
void inordem(No *elemento);
void inserirelemento(No* novo, No* elemento);
No* pesquisar(int valorprocurado, No* elemento);
No* procurapai(No *procurado, No* elemento);
void main()
{
No *raiz = NULL;
No *novo;
int dado;
int opcao;
do
{
printf("1 - Inserir\n");
printf("2 - Pesquisar\n");
printf("3 - Mostrar\n");
printf("0 - Sair\n");
printf("Opcao: ");
scanf("%d", &opcao);
setbuf(stdin, NULL);
switch(opcao)
{
case 1:
novo = malloc(sizeof(No));
novo->esquerdo = NULL;
novo->direito = NULL;
printf("Digite um valor para inserir : ");
scanf("%d", &dado);
novo->dado = dado;
setbuf(stdin, NULL);
if (raiz == NULL)
raiz = novo;
else
inserirelemento(novo, raiz);
break;
case 2:
printf("Digite um valor para inserir : ");
scanf("%d", &dado);
setbuf(stdin, NULL);
novo = pesquisar(dado, raiz);
if (novo == NULL)
{
printf("Este elemento não se encontra nesta arvore!");
}
else
{
printf("Este elemento está na arvore.\n");
if (novo == raiz)
{
printf("Este elemento é Raiz!\n");
}
else
{
No *pai = procurapai(novo, raiz);
printf("O pai deste elemento é o : %d\n", pai->dado);
}
}
break;
case 3:
inordem(raiz);
break;
case 0:
printf("Finalizando o programa!");
break;
}
}while(opcao != 0);
}
No* pesquisar(int valorprocurado, No* elemento)
{
if(elemento == NULL)
return NULL;
else if(valorprocurado == elemento->dado)
return elemento;
else if (valorprocurado > elemento->dado)
return pesquisar(valorprocurado, elemento->direito);
else if (valorprocurado < elemento->dado)
return pesquisar(valorprocurado, elemento->esquerdo);
}
void inordem(No *elemento)
{
if(elemento != NULL)
{
inordem(elemento->esquerdo);
printf("valor: %d\n", elemento->dado);
inordem(elemento->direito);
}
}
void inserirelemento(No *novo, No* elemento)
{
if(novo->dado > elemento->dado)
{
if(elemento->direito != NULL)
inserirelemento(novo, elemento->direito);
else
elemento->direito = novo;
}
else
{
if(elemento->esquerdo != NULL)
inserirelemento(novo, elemento->esquerdo);
else
elemento->esquerdo = novo;
}
}
No* procurapai(No *procurado, No* elemento)
{
if(procurado->dado > elemento->dado )
{
if(procurado == elemento->direito)
return elemento;
else
procurapai(procurado, elemento->direito);
}
else
{
if(procurado == elemento->esquerdo)
return elemento;
else
procurapai(procurado, elemento->esquerdo);
}
}