In my menu it is not making the correct output in the print. In addition to the search return only empty tree.
#include<iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef int TipoChave;
typedef struct TipoRegistro{
TipoChave Chave;
string Nome;
float Preco;
int QuantEstoque;
}TipoRegistro;
typedef struct TipoNo* Apontador;
typedef struct TipoNo{
TipoRegistro Reg;
Apontador Esq, Dir;
}TipoNo;
void ImprimeEmOrdem(TipoNo *pRaiz)
{
if(pRaiz != NULL)
{
ImprimeEmOrdem(pRaiz->Esq);
cout<<"IMPRIME "<<pRaiz->Reg.Chave;
ImprimeEmOrdem(pRaiz->Dir);
}
}
void Pesquisa(TipoRegistro x, Apontador *p)
{
if((*p) == NULL)
{
cout<<"ERRO 1: Regristo nao esta presente\n"<<endl;
}
if(x.Chave < (*p)->Reg.Chave)
{
Pesquisa(x, &((*p)->Esq));
}
if(x.Chave > (*p)->Reg.Chave)
{
Pesquisa(x, &((*p)->Dir));
}
else
{
x = (*p)->Reg;
}
}
void Insere(TipoRegistro x, Apontador *p)
{
cout << "teste";
if(*p == NULL)
{
cout << "primeiro if";
*p = (Apontador)malloc(sizeof(TipoNo));
(*p)->Reg = x;
(*p)->Esq = NULL;
(*p)->Dir = NULL;
cout << "Registro inserido com sucesso";
}
if(x.Chave < (*p)->Reg.Chave)
{
cout << "segundo if";
Insere(x,&(*p)->Esq);
return;
}
if(x.Chave > (*p)->Reg.Chave)
{
cout << "terceiro if";
Insere(x, &(*p)->Dir);
return;
}
//else cout<<"ERRO 2 : Regristo ja existe na arvore\n";
}
void Inicializa(Apontador p) //Apontador 'e um ponteiro
{
p = NULL;
}
int main()
{
int op, c = 1;
Apontador No, Topo;
TipoRegistro x;
Topo = NULL;
//No = Topo;
do //while(c != 0)
{
cout<<"Escolha Uma das opcoes abaixo"<<endl;
cout<<"\t1. Inserir Produtos: \n\t2. Buscar Produtos \n\t3. SAIR"<<endl;
cin>>op;
switch (op)
{
case 1 :
cout<<"DIGITE O CODIGO : ";
cin>>x.Chave;
cout<<"DIGITE O NOME DO PRODUTO : ";
cin>>x.Nome;
cout<<"DIGITE O PRECO DO PRODUTO : ";
cin>>x.Preco;
cout<<"DIGITE A QUANTIDADE DISPONIVEL NO ESTOQUE : ";
cin>>x.QuantEstoque;
cout << x.Chave << endl;
cout << (Topo == NULL) << endl;
Insere(x, &Topo);
cout << Topo->Reg.Chave;
Pesquisa(x, &Topo);
break;
case 2 :
cout<<"DIGITE O CODIGO OU NOME A SER BUSCADO : ";
cin>>x.Chave;
Pesquisa(x, &Topo);
break;
case 3 :
cout<<"VOCE ESTA SAINDO\n";
c = 0 ;
break;
default :
cout<<"OPCAO INVALIDA";
break;
}
}while(op !=3 );
ImprimeEmOrdem(Topo);
}