Você está na página 1de 39

rvores

Prof. Csar Melo


DCC/ICE/UFAM
Introduo

As estruturas anteriores so chamadas de


unidimensionais (ou lineares)

E!em"lo so #etores e listas

$o ade%uadas "ara re"resentar hierar%uias.

E!em"lo& 'r#ore de diret(rios

)r#ore uma estrutura ade%uada "ara re"resentar


hierar%uias

A forma mais natural "ara definirmos uma


estrutura de 'r#ore usando recursi#idade
Estrutura de rvores

Uma 'r#ore com"osta "or um con*unto de n(s.

E!iste um n( r+ denominado raiz+ %ue contm ,ero ou


mais su-.'r#ores+ cu*as ra/,es so li0adas a r.

Esses n(s ra/,es das su-.'r#ores so ditos filhos do n(


pai+ no caso r.

$(s com filhos so comumente chamados de ns


internos e n(s %ue no t1m filhos so chamados de
folhas+ ou n(s e!ternos.
Estrutura de rvores
Por adotarmos essa forma de representao grfica, no representamos
explicitamente a direo dos ponteiros, subentendendo que eles apontam
sempre do pai para os filhos.
Tipos de rvores

2 n3mero de filhos "ermitido "or n( o %ue diferencia


os di#ersos ti"os de 'r#ores e!istentes.

Estudaremos as 'r#ores -in'rias+ onde cada n( tem+ no


m'!imo+ dois filhos.

Estruturas recursi#as sero usadas como -ase "ara o


estudo e a im"lementa4o das o"era45es com 'r#ores.
RVOR! "#$R#%!
rvore Binria

Um e!em"lo de utili,a4o de 'r#ores -in'rias


est' na a#alia4o de e!"ress5es.

Como tra-alhamos com o"eradores %ue es"eram


um ou dois o"erandos+ os n(s da 'r#ore "ara
re"resentar uma e!"resso t1m no m'!imo dois
filhos.

$essa 'r#ore+ os n(s folhas re"resentam


o"erandos e os n(s internos o"eradores.
rvores Binrias
sta r&ore representa a expresso '()*+,'-./+)0
Estrutura de uma AB

$uma 'r#ore -in'ria+ cada n( tem ,ero+ um ou


dois filhos.

De maneira recursi#a+ "odemos definir uma


'r#ore -in'ria como sendo&

uma 'r#ore #a,ia6 ou

um n( rai, tendo duas su-.'r#ores+ identificadas como a


su-.'r#ore da direita (sad) e a su-.'r#ore da es%uerda
(sae).
Estrutura de uma AB
Estrutura de uma AB

2s n(s a+ b+ c+ d+ e+ f formam uma 'r#ore -in'ria


da se0uinte maneira&

A 'r#ore com"osta do n( a+ da su-'r#ore 7


es%uerda formada "or b e d+ e da su-.'r#ore 7
direita formada "or c+ e e f.

2 n( a re"resenta a rai, da 'r#ore e os n(s b e c


as ra/,es das su-.'r#ores.

Finalmente+ os n(s d+ e e f so folhas da 'r#ore.


Descrio de AB

Uma su-.'r#ore de uma 'r#ore -in'ria sem"re


es"ecificada como sendo a sae ou a sad de uma 'r#ore
maior+ e %ual%uer das duas su-.'r#ores "ode ser #a,ia.

As duas 'r#ores da Fi0ura a-ai!o so distintas.


Altura de uma AB

Uma "ro"riedade fundamental de todas as 'r#ores


%ue s( e!iste um caminho da rai, "ara %ual%uer
n(.

Podemos definir a altura de uma 'r#ore como


sendo o com"rimento do caminho mais lon0o da
rai, at uma das folhas.

A altura de uma 'r#ore com um 3nico n( rai,


,ero e+ "or conse0uinte+ di,emos %ue a altura de
uma 'r#ore #a,ia ne0ati#a e #ale .8.
Exemplos: Alturas e Nveis
Nvel 0
Nvel 1
Nvel 2
Nvel 3
Tipos de rvores: Ceia
Ns intermedirios com dois filhos.
Tipos de rvores: !er"eita
Todos os Ns folhas esto no mesmo nvel
Tipos de rvores: Completa
1
rvore perfeita at o nvel h-1
1
Na nvel h os ns esto dispostos da
es!"erda para a direita
RVOR! "#$R#%!
2 "3!4%
Introduo

Dicion'rio din9mico& Inser4o+ remo4o e :usca em tem"o


(timo6

;' sa-emos %ue a estrutura de #etor no ade%uada "ara


im"lementar dicion'rios din9micos.

Para inserirmos um no#o elemento num #etor ordenado+ temos %ue


rearrumar os elementos no #etor6

<itua4o an'lo0a ocorre %uando remo#emos um elemento do


#etor.

Precisamos "ortanto de uma estrutura din9mica %ue d1 su"orte a


o"era45es de -usca.
!ropriedade

Em uma rvore binria, o valor associado raiz sempre
maior que o valor associado a qualquer n da sub-rvore
esquerda (sae), e sempre menor que o valor associado a
qualquer n da sub-rvore direita (sad).
A #usca: Como$

Para "rocurar um #alor numa 'r#ore+ com"aramos o


#alor %ue -uscamos com o #alor associado 7 rai,.

Em caso de i0ualdade

o #alor foi encontrado6

<e o #alor "rocurado for menor %ue o #alor da rai,

a -usca continua na sae6

<e o #alor "rocurado for maior %ue o #alor da rai,

a -usca continua na sad.

Por essa ra,o+ estas 'r#ores so chamadas de rvores


binrias de busca.
A #usca: Como$ %cont&

<e a informa4o a ser arma,enada em cada n( da


'r#ore for um n3mero inteiro "odemos usar os
o"eradores relacionais (=>?+ =@?+ =A?).

Porm+ se ti#ermos %ue considerar casos em %ue a


informa4o mais com"le!a+ a fun4o de
com"ara4o de#e ser definida "elo "ro0ramador+
es"ecificamente "ara cada caso.
Tipo da rvore Binria
typedef struct tipoNo {
int valor;
struct tipoNo *esq;
struct tipoNo *dir;
} tipoNo;
Busca: !rocurando o valor '
(perao de Busca
TArvore busca (TArvore r, int v)
{
if (r == NU) return NU;
else if (r!"info " v) return busca(r!"esq,v);
else if (r!"info # v) return busca(r!"dir,v);
else return r;
}
Insero: Inserindo o valor )
Insero: Exerccio

Im"lemente a fun4o de inser4o em uma 'r#ore


-in'ria
(utros Exerccios

Im"lemente uma fun4o %ue retorne o menor


elemento de uma 'r#ore -in'ria

Im"lemente uma fun4o %ue retorne o maior


elemento de uma 'r#ore -in'ria

Im"lemente uma fun4o %ue retorne o n3mero de


n(s de uma 'r#ore -in'ria

Im"lemente uma fun4o %ue calcule a altura de


uma 'r#ore -in'ria

Im"lemente uma fun4o de -usca. Bual a


com"le!idade dessa fun4oC
(perao de *emoo

E!istem tr1s situa45es "oss/#eis&

A "rimeira %uando se dese*a retirar um elemento %ue


folha da 'r#ore.

A se0unda situa4o acontece %uando o n( a ser retirado


"ossui um 3nico filho.

A terceira situa4o ocorre %uando o n( a ser


retirado tem dois filhos.
(perao de *emoo
!rimeira +ituao
#etira folha 3
(perao de *emoo
+e,unda +ituao
(perao de *emoo
!rimeira e +e,unda +itua-es

A "rimeira+ e mais sim"les+ %uando se dese*a


retirar um elemento %ue folha da 'r#ore. $este
caso+ -asta retirar o elemento da 'r#ore e
atuali,ar o "ai+ "ois seu filho no e!iste mais.

A se0unda situa4o+ ainda sim"les+ acontece


%uando o n( a ser retirado "ossui um 3nico filho.
Para retirar esse elemento necess'rio antes
acertar o "onteiro do "ai+ ="ulando? o n(& o 3nico
neto "assa a ser filho direto.
(perao de *emoo
Terceira +ituao
(perao de *emoo
Terceira +ituao
1 $ocali%ar o n a ser eliminado &n '(
1 )ncontrar o n de maior valor na sae
1 * o n mais a direita da sae &n +(
1 Trocar os valores entre o n a ser eliminado e o n encontrado.
1 $ocali%ar novamente o n a ser eliminado &n '(
(perao de *emoo
Terceira +ituao

Para "oder retirar esse n( da 'r#ore+ de#emos


"roceder da se0uinte forma&

encontramos o elemento %ue "recede o elemento a ser


retirado na ordena4o. Isto e%ui#ale a encontrar o
elemento mais 7 direita da su-.'r#ore 7 es%uerda6

trocamos a informa4o do n( a ser retirado com a


informa4o do n( encontrado6

retiramos no#amente o n( encontrado (%ue a0ora


contm a informa4o do n( %ue se dese*a retirar).

2-ser#a.se %ue retirar tal n( a0ora tri#ial+ "ois esse


um n( folha ou um n( com um 3nico filho.
(perao de *emoo
TArvore retira (TArvore r, int v)
{
if (r == NU)
return NU;
else if (r!"info " v)
r!"esq = retira(r!"esq, v);
else if (r!"info # v)
r!"dir = retira(r!"dir, v);
else { $* ac%ou o ele&ento *$
'''
(perao de *emoo
'''
else { $* ac%ou o ele&ento *$
$* ele&ento se& fil%os *$
if (r!"esq == NU (( r!"dir == NU) {
free (r);
r = NU;
}
$* s) te& fil%o * direita *$
else if (r!"esq == NU) {
TArvore t = r;
r = r!"dir;
free (t);
}
$* s) te& fil%o * esquerda *$
else if (r!"dir == NU) {
TArvore t = r;
r = r!"esq;
free (t);
}
'''
(perao de *emoo
'''
$* te& os dois fil%os *$
else {
TArvore f = r!"esq;
+%ile (f!"dir ,= NU) {
f = f!"dir;
}
$* troca as infor&a-.es *$
r!"info = f!"info;
f!"info = v;
r!"esq = retira(r!"esq,v);
}
}
return r;
}
( .I/
Per0untasCCC

Você também pode gostar