Vous êtes sur la page 1sur 11

UNIVERSIDADE FEDERAL DO ESPIRITO SANTO

BRENNO LUCAS DE SOLZA JUSTINO


LEONARDO LAIA ARPINI

APOSTILA DE ESTRUTURA DE DADOS II


rvore Binria de Busca

Alegre
2015

SUMRIO
1 INTRODUO...........................................................................................................1
2 RVORES BINRIAS DE BUSCA...........................................................................2
2.1 Insero................................................................................................................2
2.2 Busca...................................................................................................................4
2.3 Remoo..............................................................................................................5
2.3.1 Elemento um n folha.................................................................................5
2.3.2 Elemento possui um nico filho.....................................................................6
2.3.3 Elemento possui dois filhos...........................................................................6
2.3.4 Problemas da rvore Binria de Busca........................................................8
3 REFERNCIAS..........................................................................................................9

1 INTRODUO
A rvore Binria de Busca utiliza o mtodo dividir e conquistar, que primeiro
compara o elemento procurado com o n raiz onde verifica se igual, maior ou
menor, caso seja maior ir para a sub-rvore da direita (sad), caso seja menor ir ir
para a sub-rvore da esquerda (sae), este processo ir se repetir at que o elemento
seja encontrado que acontece quando o elemento procurado e o valor do n sejam
iguais ou at que no haja mais elementos para serem comparados.
Deve-se observar que no existe uma nica forma de organizar um conjunto
de informaes em uma rvore de busca binria, afinal, dependendo da escolha do
n raiz, obtm-se rvores diferentes. No pior caso o numero de comparaes feitas
ser igual ao numero de elementos da rvore. Em uma rvore Binria de Busca
perfeitamente balanceada teremos altura mnima e o numero de comparaes ser
log2(n+1).
A rvore Binria de Busca tem grande utilidade da em armazenar dados que
so frequentemente comparados com outros dados. Por a rvore de busca binria
ser dinmica ela pode sofrer alteraes (inseres e remoes de ns) aps ter sido
criada. rvores binrias de busca combinam as vantagens de 2 estruturas: vetor
ordenado pela busca eficiente e lista encadeada por inserir e remover elementos de
forma eficiente.

2 RVORES BINRIAS DE BUSCA


Nesta apostila iremos considerar que a informao associado ao n um
nmero inteiro, os algoritmos estaro na linguagem C.
struct arvore {
int info;
struct arvore* esq;
struct arvore* dir;
}
typedef struct arvore Arvore;
As trs operaes bsicas em um rvore Binria de Busca so:

Insero

Busca

Remoo

2.1 Insero
Insere-se um novo elemento na rvore mantendo a propriedade de que na
esquerda sero nmeros menores que o n central e na direita nmeros maiores
seguindo estes trs passos:

O cdigo ir procurar um local para inserir o novo n, comeando a


procura a partir do n-raiz.

Para cada n-raiz de uma sub-rvore ele ir comparar, caso se o novo


n possui um valor menor do que o valor n raiz (vai para sub-rvore
esquerda), ou se o valor maior que o valor no n-raiz (vai para subrvore direita).

Caso filho esquerdo/direito de um n raiz for nula quando atingida o


novo n ser colocado como sendo filho do n-raiz.

O algoritmo abaixo demonstra o cdigo de insero na rvore Binria de


Busca.

Arvore* insere(Arvore* a, int v){


if(a==NULL){
a = malloc(sizeof(Arvore));
a->info = v;
a->esq = a->dir = NULL;
}
else if (v < a->info)
a->esq = insere(a->esq, v);
else if(v > a->info)
a->dir = insere(a->dir, v);
return a;
}
Para uma maior compreenso do algoritmo observe o exemplo da insero
dos nmeros 17, 99, 13, 1, 3, 100, 400 em sequncia:
1 No comeo a rvore se encontra
vazia.
2 O nmero 17 ser ento inserido
tornando-se o n raiz.
3 iniciada a insero do numero
99 na raiz, feita ento uma comparao
e como 99 > 17 ento ele deve ser
colocado na sad do n contendo 17, J
que o n 17 no possui filho direito, o 99
inserido nesta posio da arvore.
4 iniciada a insero do numero
13 na raiz. feita ento uma comparao
e como e como 13 < 17, 13 deve ser
colocado na sae do n contendo 17. J
que o n 17 no possui filho esquerdo, 13
inserido na rvore nessa posio.
5 Para insero do numero repete-se
o procedimento, 1<17 ento ser inserido
na sae, encontra o n contendo 13, 1<13

ento ser novamente inserido da sae. Como 13 no possui filho esquerdo 1


inserido nessa posio.
6 Para inserir o valor 3, repete-se o
procedimento.

3<17

ento

ele

ser

inserido na sae, encontra o n contendo


13, 3<13 ento ser novamente inserido
na sae, encontra o n contendo 1, 3>1
ento ser inserido na sad como 1 no
possui filho direito ser inserido nessa
posio da rvore.
7 Repete-se todo o procedimento
para insero do 100. Primeiro compara
com 17, 100>17 vai para a sad, compara
com 99, 100>99 vai para sad, 99 no
possui

filho

direito

ento

100

ser

inserido nessa posio da rvore.


8 Repete-se todo o procedimento
para insero do 400. Primeiro compara
com 17, 400>17 vai para a sad, compara
com 99, 400>99 vai para sad, compara
com 100, 400>100 vai para sad, 100 no
possui

filho

direito

ento

400

ser

inserido nessa posio da rvore.


2.2 Busca
Para a busca em uma rvore binria deve-se examinar a raiz. Se o valor for
igual raiz, o valor foi encontrado. Se o valor for menor do que a raiz, ento deve-se
buscar na subrvore da esquerda, se o valor for maior que a raiz, ento deve-se
buscar na subrvore da direita de maneira recursiva at que se alcance o n-folha
da rvore ele contendo ou no o valor buscado.
Esta operao efetua log n operaes no caso mdio e n no pior caso quando
a rvore est desequilibrada. Neste caso, a rvore considerada uma rvore
degenerada.
O algoritmo a seguir mostra o cdigo de busca na rvore Binria de Busca.

Arvore* busca(Arvore* a, int v){


if(!estaVazia(a)) {
if (v < a->info)
return busca(a->esq, v);
else if(v > a->info)
return busca(a->dir, v);
else
return a;
}
return NULL;
}
2.3 Remoo
Para a remoo de um n na folha existem 3 casos que devem ser considerados.
So eles:
1.

Elemento um n folha.

2.

Elemento possui um nico filho.

3.

Elemento possui dois filhos.

2.3.1 Elemento um n folha


o caso mais simples. Quando o elemento um n folha basta excluir
ele(figura 1).

Figura 1: Excluso de n folha

2.3.2 Elemento possui um nico filho


Quando se quer excluir um n que possui um filho o pai do n herda o filho,
ou seja, o filho assume o lugar do pai na rvore (figura 2).

Figura 2: Excluso do no com um nico filho


2.3.3 Elemento possui dois filhos
A remoo pode ser feita de duas maneiras, um o elemento vai ser
substitudo pelo elemento mais a direita da sub-rvore esquerda (antecessor), ou o
elemento vai ser substitudo pelo elemento mais a esquerda da sub-rvore direita
(sucessor).
Nos dois casos os passos sero iguais, primeira mente se escolhe se ele ser
substitudo pelo antecessor ou pelo sucessor, depois de escolhido deve-se achar o
elemento e ento a troca realizada agora retira-se o n de maneira recursiva
(figura 3).

Figura 3: Excluso de n com dois filhos


O algoritmo abaixo mostra como fica o cdigo de excluso da rvore Binria
de Busca.

Arvore* retira(Arvore* a, int v){


if(a==NULL){
return NULL;
}
else if (v < a->info)
a->esq = retira(a->esq, v);
else if(v > a->info)
a->dir = retira(a->dir, v);
else{
if(a->esq == NULL && a->dir == NULL){
free(a);
a = NULL;
}
else if(a->esq == NULL){
Arvore *t = a;
a = a->dir;
free(t);
}
else if(a->dir == NULL){
Arvore *t = a;
a = a->esq;
free(t);
}
else{ // Arvore tem os dois filhos
Arvore *f = a->esq;
while(f->dir != NULL)
f = f->dir;
a->info = f->info;
f->info = v;
a->esq = retira(a->esq, v);
}
}
return a;
}

A excluso possui alguns pontos negativos:


A eliminao mais complexa do que a insero. A razo bsica para que
isso ocorra que a caracterstica organizacional da rvore no deve nunca ser
quebrada.
A sub-rvore da direita no deve nunca conter elementos menores que o do
n excludo.
A subrvore esquerda no deve nunca conter elementos maiores que o do n
excludo.
Para que isso ocorra o algoritmo deve sempre que necessrio remanejar os
ns.
2.4 Problemas da rvore Binria de Busca
A rvore Binria de Busca pode acabar se deteriorando, dependendo de
como feita a distribuio de dados, caso haja grande utilizao da insero
simples. Caso a rvore se deteriore ele perda a caracterstica de eficincia nas
buscas.

REFERNCIAS
UFPE, Centro de Informtica. Disponvel em: <http://www.cin.ufpe.br/~dmrac/aula
%20de%20arvore%20binaria%20de%20busca.pdf >. Acesso em 3 de outubro de
2015.
UFSC, Departamento de Informtica e Estatstica. Eliminao em uma rvore de
Busca

Binria.

Disponvel

em:

<

http://www.inf.ufsc.br/~ine5384-

hp/Estruturas.ArvBusca.html >. Acesso em 3 de outubro de 2015.


CAMPOS, Juliana. Estruturas de Dados I(9_Arvores_Binarias_de_Pesquisa.pdf).
Alegre: UFES, 2011.
LAUREANO, Marcos Aurelio. Estrutura de Dados com Algoritmos e C. ed. 1.
Curitiba: Brasport, 2012. 154 p.

Vous aimerez peut-être aussi