Você está na página 1de 11

17/12/2014

WithoutatitleTitle

EstruturasdeDadosT.332
Captulo8
rvores
8.2rvoresdeBusca
8.2.1.rvores(binrias)deBusca
CaractersticasdervoresdeBusca
ExemplodervoredeBuscaBinria
Buscaemrvores
Construo:Inserosimplesemrvorebinria
Exemplo:Inserodeumelementocomchave14
Eliminaoemumarvoredebuscabinria
AlgoritmodeDeleoemrvoredeBuscaBinria
ProblemascomrvoresBinrias
8.2.2rvoresAVL
rvoresAVL:InclusocomRotao
Exemplo:CriaodeumarvoreAVLcomosnosde1a7
rvoresAVL:InclusocomRotaoSimples
rvoresAVL:Inclusodo6
rvoresAVL:Inclusodo7
rvoresAVL:InclusocomRotaoDupla
Exemplo:Inserimosaschaves8a15,emordeminversa,narvoreanterior
rvoresAVL:InclusocomRotaoDupla
rvoresAVL:Inclusodo14comRotaoDupla
rvoresAVL:Inclusodo13(rot.dupla)
rvoresAVL:Inclusodo12
rvoresAVL:Inclusodo11
rvoresAVL:Inclusodo10,9,8
Interessanteocasodainserode8.5:

8.2.1.rvores(binrias)deBusca
rvores(binrias)somuitoutilizadasparaserepresentarumagrandeconjuntodedadosondesedesejaencontrarumelementodeacordocoma
suachave.
Definio:rvoreBinriadeBusca(NiklausWirth):
Umaquervoreseencontraorganizadadetalformaque,paracadanodoti,todasaschaves(info)dasubrvoreesquerdadetisomenoresque(ou
iguaisa)tiedireitasomaioresqueti.
TermoemIngls:SearchTree

CaractersticasdervoresdeBusca
Emumarvoredebuscapossvelencontrarsequalquerchaveexistentedescendosearvore
sempreesquerdatodavezqueachaveprocuradaformenordoqueachavedonodovisitadoe
sempredireitatodavezqueformaior.
Aescolhadadireodebuscasdependedachavequeseprocuraedachavequeonodoatualpossui.
Abuscadeumelementoemumarvorebalanceadacomnelementostomatempomdio<log(n),tendoabuscaentoO(logn).
Graasestruturadervoreabuscapoderserfeitacomapenaslog(n)comparaesdeelementos.

ExemplodervoredeBuscaBinria
http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

1/11

17/12/2014

WithoutatitleTitle

Buscaem
rvores
Considerandoseaestruturadeadosdaaulapassada,temoscomoalgoritmodebusca:
nodo*localize(chave:info,ptr:*nodo)
incio
enquanto(ptr~=nulo)e(ptr>info~=chave)faa
se(ptr>info<chave)ento
ptr<ptr>dir;
seno
ptr<ptr>esq;
fimse
fimenquanto
retorneptr;
fimlocalize

Exerccio

Construo:Inserosimplesemrvorebinria
insero(chave:info,ptr:*nodo)
oNovo:*nodo;
incio
se(chave<ptr>info)ento
se(ptr>esq=nulo)ento
oNovo<alocanovonodo;
oNovo>info<chave;
oNovo>esq<nulo;oNovo>dir<nulo;
ptr>esq<oNovo;
seno
se(ptr>dir=nulo)ento
oNovo<alocanovonodo;
oNovo>info<chave;
oNovo>esq<nulo;oNovo>dir<nulo;
ptr>dir<oNovo;
seno
insero(chave,ptr>dir);
fimse
fimse
fimse
fiminsero

Exerccio

Exemplo:Inserodeumelementocomchave14

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

2/11

17/12/2014

WithoutatitleTitle

Eliminaoemumarvoredebuscabinria
Aeliminaomaiscomplexadoqueainsero
Arazobsicaqueacaractersticaorganizacionaldarvorenodeveserquebrada:
Asubrvoredadireitadeumnodonodevepossuirchavesmenoresdoqueopaidonodoeliminado.
Asubrvoreesquerdadonodoeliminadonodevepossuirchavesmaioresdoqueopaidonodoeliminado.
Paragarantiristo,oalgoritmodeexclusodeveremanejarosnodos.
Exemplo:EliminaodoNodocomChave15

Eliminaoemumarvoredebuscabinria
Seoelementopossuirsomenteumasubrvorefilha:
1. Podemossimplesmentemoverestasubrvoretodaparacima.
2. Onicosucessordonodoaserexcludoserumdossucessoresdiretosdopaidonodoasereliminado.
3. Seonodoaserexcludofilhoesquerdodeseupai,oseufilhoseronovofilhoesquerdodesteeviceversa.
Exemplo:EliminaodoElementocomChave5

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

3/11

17/12/2014

WithoutatitleTitle

Eliminaoemumarvoredebuscabinria
Seoelementopossuirduassubrvoresfilhas:
Seosucessordireitonopossuisubrvoreesquerda,elequeocupaoseulugar.
Sepossuirumasubrvoreesquerda,araizdestasermovidaparacimaeassimpordiante.
Aestratgiageral(MarkAllenWeiss)sempresubstituirachaveretiradapelamenorchavedasubrvoredireita
Podefacilmenteserencontrada.
Exemplo:EliminaodoElementocomChave11

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

4/11

17/12/2014

WithoutatitleTitle

AlgoritmodeDeleoemrvoredeBuscaBinria
nodo*delete(info:tipoinfo,arv:*nodo)
incio
tmp,filho:*nodo;
searvore==nuloento
retorneerro;
seno
se(info<arv>info)//vaesq.
arv>esq<delete(info,arv>esq);
retornearv;
seno
se(info>arv>info)//vadir.
arv>dir<delete(info,arv>dir);
retornearv;
seno//encontreielementoquequerodeletar.
se(arv>dir~=nuloEarv>esq~=nulo)//2fil
tmp<minimo(arv>dir);
arv>info<tmp>info;
arv>dir<delete(arv>info,arv>dir);
retornearv;
seno//umfilhos
tmp<arv;
se(arv>dir!=nulo)ento//umfilhodir.
filho<arv>dir;
retornefilho;
seno
se(arv>esq!=nulo)ento//filhoesq.
filho<arv>esq;
retornefilho;
seno//folha
liberearv;
retornenulo;
fimse
fimse
fimse
fimse
fimse
fimse
fim

Exerccio

ProblemascomrvoresBinrias
Deteriorao
quandoinserimosutilizandoainserosimples,dependendodadistribuiodedados,podehaverdeteriorao.
rvoresdeterioradasperdemacaractersticadeeficinciadebusca.

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

5/11

17/12/2014

WithoutatitleTitle

8.2.2rvoresAVL
Manterumarvoredebuscabalanceadasobapresenadeconstantesinseresedeleesineficiente.
ParacontornaresteproblemafoicriadaarvoreAVL(AdelsonVelskiieLandis).
ArvoreAVLumarvorebinriacomumacondiodebalano,pormnocompletamentebalanceada.
rvoresAVLpermiteminsero/deleoerebalanceamentoaceitavelmenterpidos.

rvoresAVL
Critriodebalanceamento:Dadoumnodoqualquer,umarvoreestAVLbalanceadaseasalturasdasduassubrvoresdestenododiferemde,no
mximo,1.
Pararebalancearumarvoreapsumainsero,soutilizadasrotaesdesubrvores:
Rotaessimplesemmuitoscasos
Rotaesduplasemalguns.
Exemploderebalanceamento:Onodocomchave6.5desequilibrouarvore.Comarotaodasubrvoreemtornodonodo7,
rebalanceamos.

rvoresAVL:InclusocomRotao
Algoritmobsico:
1. Partimosdonodoinseridoesubimosarvore.
2. Atualizamosainformaodobalanceamentoemcadanodo(narvoreAVL,cadanodoconheceasuaaltura).
3. Sechegamosraizsemencontrarnadaerrado,terminamos.
4. Casoencontremosumnododesbalanceado
(corresponde|HesqHdir|<2ferida),realizamosarotaonoprimeironododesbalanceadoencontrado.
Noexemploanterior,istosignificaque,depoisdainserode6.5,onodo8ficoudesbalanceado.

Exemplo:CriaodeumarvoreAVLcomosnsde1a7
Oprimeiroproblemaocorrequandoinserimoso3.AcondioAVLfoiviolada.
Executamosumarotaosimplesentrearaiz(cujacondioAVLestviolada)eseufilhodadireita.

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

6/11

17/12/2014

WithoutatitleTitle

rvoresAVL:InclusocomRotaoSimples
Inserimos4semproblemas.
Inserimos5:violaoem3.
Mesmoprocessodarotaoanteriorserseguido.
Importantssimo:Observeseque2precisasernotificadoqueseufilhoagoraonodocomchave4

rvoresAVL:Inclusodo6
O6desequilibraaraiz:
Subrvoredireitatemaltura0
Subrvoreesquerdatemaltura2.
Rotacionamosnaraizentre2e4:
Transformamos2emfilhode4
Subrvoreesquerdaoriginalde4agorasubrvoredireitade2.Condiodeordemdarvoredebuscamantida.

rvoresAVL:Inclusodo7
Ainclusodeumnodocomchave7causaumarotaocomojhavamosvistoantes:
5ficadesequilibrado.
Rotacionamosem6.

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

7/11

17/12/2014

WithoutatitleTitle

rvoresAVL:InclusocomRotaoDupla
Oalgoritmodescritoatagoratemumproblema:
Existemcasosondeelenobastaparaconsertararvoreapsumainclusoouexcliuso.
Exemplo:Inserimosaschaves8a15,emordeminversa,narvoreanterior
Ainserode15noprovocaproblemas,nemdesbalanceiaarvore.
Ainserode14,porsuavez,fazorebalanceamentofalhar.

rvoresAVL:InclusocomRotaoDupla
Oproblemaquesurgeaqui,quetanto7como14socandidatossubrvoreesquerdade15.
Nestecaso,necessitamosdeumaduplarotao.

rvoresAVL:InclusocomRotaoDupla
Semelhanterotaosimples,squeenvolve4subrvores:
Corresponderiaaumarotaoefetuadaprimeiroentrek1ek2edepoisentrek2ek3.

rvoresAVL:InclusocomRotaoDupla
Exemplosimtricoaoanterior

rvoresAVL:Inclusodo14comRotaoDupla
http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

8/11

17/12/2014

WithoutatitleTitle

Noexemplo,arotaodireitaesquerdaenvolveo7,o15eo1:
k3onododechave7,k1odechave15ek2odechave14
Primeirorotacionamos1415adireita,depois714aesquerda.

rvoresAVL:Inclusodo13(rot.dupla)
Novamenteumaduplarotaodireitaesquerda:
Destavezarotaoenvolver6(k3),14(k1)e7(k2).

rvoresAVL:Inclusodo12
Ainclusodo12provocaumdesequilbrionaraiz:
Como12noestentre4e7,sabemosqueumarotaosimplesvaifuncionar.

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

9/11

17/12/2014

WithoutatitleTitle

rvoresAVL:Inclusodo11
Ainclusodo11provocaumdesequilbriologoembaixo:
Como11noestentre12e13,sabemosqueumarotaosimplesvaifuncionar.

rvoresAVL:Inclusodo10,9,8
10e9seroinseridoscomrotaosimples,8semrotaoalguma.
Tenteemcasa.
Arvoreresultanteveremosadiante.

rvoresAVL:InclusocomRotaoDupla
Interessanteocasodainserode8.5:

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

10/11

17/12/2014

WithoutatitleTitle

Temosumaduplarotaoquepareceserumasimples:

http://www.inf.ufsc.br/~ine5384hp/Estruturas.ArvBusca.html

11/11