Sunteți pe pagina 1din 11

ECOI08 Aula 4

Prof. Rafael Santos


Email: rafafic@gmail.com
rvore Binria de pesquisa
Declarao das estruturas
typedef long TipoChave;

typedef struct TipoRegistro {


TipoChave Chave;
/* outros componentes */
} TipoRegistro;

typedef struct TipoNo * TipoApontador;

typedef struct TipoNo {


TipoRegistro Reg;
TipoApontador Esq, Dir;
} TipoNo;

typedef TipoApontador TipoDicionario;


rvore Binria de pesquisa
Funes da rvore binria

void Inicializa(TipoApontador &Dicionario)


void Insere(TipoRegistro x, TipoApontador &p)
void Pesquisa(TipoRegistro &x, TipoApontador p)
void Retira(TipoRegistro x, TipoApontador &p)
void Antecessor(TipoApontador q, TipoApontador &r)
void Central(TipoApontador p)
rvore Binria de pesquisa
Inicializa
void Inicializa(TipoApontador &Dicionario)
{
Dicionario = NULL;
}
rvore Binria de pesquisa
Insere
void Insere(TipoRegistro x, TipoApontador &p)
{ if (p == NULL){
p = new TipoNo;
p->Reg = x;
p->Esq = NULL;
p->Dir = NULL;
return;
}
if (x.Chave < p->Reg.Chave){
Insere(x, p->Esq);
return;
}
if (x.Chave > p->Reg.Chave)
Insere(x, p->Dir);
else cout<< "Erro : Registro ja existe na arvore\n";
}
rvore Binria de pesquisa
Pesquisa
void Pesquisa(TipoRegistro &x, TipoApontador p)
{
if(p == NULL){
cout<< "Erro: Registro nao esta presente na arvore\n";
return;
}
if(x.Chave < p->Reg.Chave){
Pesquisa(x, p->Esq);
return;
}
if (x.Chave > p->Reg.Chave)
Pesquisa(x, p->Dir);
else x = p->Reg;
}
rvore Binria de pesquisa
Retira
void Retira(TipoRegistro x, TipoApontador &p)
{ TipoApontador Aux;
if(p == NULL){
cout<<"Erro : Registro nao esta na arvore\n";
return;
}
if(x.Chave < p->Reg.Chave){ Retira(x, p->Esq); return; }
if(x.Chave > p->Reg.Chave){ Retira(x, p->Dir); return; }
if(p->Dir == NULL){
Aux = p; p = p->Esq;
delete(Aux);
return;
}
if(p->Esq != NULL){
Antecessor(p, p->Esq);
return;
}
Aux = p; p = p->Dir;
delete (Aux);
}
rvore Binria de pesquisa
Antecessor
void Antecessor(TipoApontador q, TipoApontador &r)
{ if (r->Dir != NULL)
{ Antecessor(q, r->Dir);
return;
}
q->Reg = r->Reg;
q = r;
r = r->Esq;
delete(q);
}
rvore Binria de pesquisa
Central
void Central(TipoApontador p)
{
if (p == NULL) return;
Central(p->Esq);
cout<<p->Reg.Chave<<endl;
Central(p->Dir);
}
rvore Binria de pesquisa

Exerccios
1. Implemente a funo apagar que receba um n
da rvore e apaga todos os ns abaixo e ele
mesmo.
2. Implemente uma funo para contar o nmero de
ns em uma rvore.
3. Implemente uma funo que imprima todas as
folhas.
4. Implemente uma funo que imprima a rvore em
nveis (do n raiz at as folhas).
Referncia Bibliografia

ZIVIANI, Nivio. Projeto de Algoritmos com implementao em Pascal e C.


3a Edio. Ed. Cengage Learning, 2011.

Algumas informaes foram retiradas da Transparncias do livro acima acessados no


site: http://www.dcc.ufmg.br/algoritmos-edicao2/cap1/transp/completo1/cap4.pdf

S-ar putea să vă placă și