Você está na página 1de 72

Estruturas de Dados

rvores
Prof. Eduardo Alchieri

rvores
(introduo)

Importncia de estruturas unidimensionais ou lineares (vetores


e listas) inegvel

Porm, estas estruturas no so


adeuadas para representar dados
ue devem ser dispostos de
maneira hierrquica

Por e!emplo, diretrios criados


em um computador
Um exemplo de estrutura de diretrio no Windows 2000

rvores
(introduo)

rvore uma estrutura de dado no linear adeuada para


representar hierarquias

rvores
(definio)

"rvores

#ados so dispostos de forma hierruica

Elementos (n$s)

%ai& (pai) ' (ancestrais)

*alhos (filhos) + (ancestrais,descendentes)

-olhas (terminais) ' (descendentes)



rvores
(definio)

-orma mais natural de definirmos uma estrutura de rvore


usando recursividade

#efini.o recursiva de rvores

/ma rvore uma cole.o de n$s

A cole.o pode estar va&ia, ou consistir de um n$ rai& %

E!iste um arco direcionado de % para a rai& de cada


su0rvore1 a rai& de cada su0rvore chamada de filho
de %, da mesma forma % chamado de pai da rai& de
cada su0rvore

rvores
(definio)

#efini.o recursiva de rvores (outra forma de representar uma


rvore)

rvores
(exemplos)

E!emplo de rvore
Quantas subrvores existem na rvore acima?
Quais so as subrvores?
Quais ns so as razes das subrvores da rvore acima?
Quais ns so considerados ns internos?
Quais ns so considerados ns externos (ol!as"?

rvores
(subrvores)

2u0rvores (visuali&a.o da defini.o recursiva)



rvores
(subrvores)

2u0rvores (visuali&a.o da defini.o recursiva)



rvores
(terminologia)

3erminologia

*rau de um n$1 n4mero de su0rvores relacionadas com o


n$

-olha1 um n$ de grau &ero

5rdem1 n4mero m!imo de galhos em um elemento

6aminho1 seu7ncia 4nica de arcos ue leva a um n$ a


partir da rai&

6omprimento do 6aminho1 n4mero de arcos no caminho

89vel de um n$1 o comprimento do caminho da rai& at o n$,


ue o n4mero de arcos no caminho

Altura1 rai& mais o m!imo n4mero de descendentes

6aminho entre a rai& e a(s) folhas(s) mais distante(s) : ;



rvores
(exemplo)

E!emplo
89vel <
89vel ;
89vel =
89vel >
5rdem1 ?
Altura1 ?

rvores !rias
(definio)

3odos os n$s da rvore possuem o mesmo grau (8), i.e.,


mesmo n4mero de filhos

#efini.o

/ma rvore 8'ria 3 um con@unto finito de n$s com as


seguintes propriedades1

5 con@unto va&ioA ou

5 con@unto consiste de uma rai& %, e e!atamente 8


rvores 8'rias distintas, ue so su0rvores de %

rvores !rias
(exemplos)

E!emplos de rvores 8'rias (8B>)


A C
6
#
E
*
-
D
/ma rvore 8'ria com n < n$s
internos contm (8 + ;)n : ; n$s
e!ternos

rvores "inrias
(definio)

#efini.o

6on@unto finito de elementos ue est va&io ou pode ser


particionado em tr7s su0con@unto dis@untos1

%ai&, um su0con@unto ue possui um 4nico elemento

2u0rvore esuerda, ue uma rvore 0inria

2u0rvore direita, ue tam0m uma rvore 0inria



rvores "inrias
(definio)

%epresenta.o esuemtica da estrutura de rvores 0inrias



rvores "inrias
(e!emplo)

E!emplo1
#
$

%

&
&'
(
&&

)

'

2


raiz da rvore
raiz da sae raiz da sad

#ercursos em rvores
(percursos)

E!istem muitas aplica.Ees de rvores

E!istem muitos algoritmos diferentes para manipul'las

8o entanto, estes algoritmos t7m a caracter9stica comum de


visitar sistematicamente todos os n$s da rvore

5 algoritmo caminha atravs da estrutura de dados e fa&


algumas computa.Ees em cada n$ da rvore

#ois mtodos essencialmente diferentes

Percurso em profundidade

Percurso pr'ordem (a rai& visitada antes)

Percurso em ordem (rvores 0inrias + a rai& visitada


na ordem, entre as su0rvores)

Percurso em p$s'ordem (a rai& visitada depois)

Percurso em largura

#ercursos em rvores
(percursos)

Percurso pr'ordem (a rai& visitada antes)

Fisite,processe a rai&, e depois

%eali&e um percurso em pr'ordem em cada uma das


su0rvores da rai& na ordem definida

Algoritmo
preGordem(8o rai&)H
2e (rai& null) ento retorneA
processa(rai&)A
para cada su0rvore sa da rai&, fa.a1
preGordem(sa)A

#ercursos em rvores
(percursos)

Percurso em'ordem (a rai& visitada na ordem, entre as


su0rvores + s$ fa& sentido para "rvores Cinrias)

Percorra em ordem a su0rvore da esuerda

Fisite,processe a rai&A

Percorra em ordem a su0rvore da direita

Algoritmo
emGordem(8o rai&)H
2e (rai& null) ento retorneA
emGordem(rai&.esuerda)A
processa(rai&)A
emGordem(rai&.direita)A

#ercursos em rvores
(percursos)

Percurso P$s'ordem (a rai& visitada depois)

%eali&e um percurso em p$s'ordem em cada uma das


su0rvores da rai& na ordem definida

Fisite,processe a rai&A

Algoritmo
posGordem(8o rai&)H
2e (rai& null) ento retorneA
para cada su0rvore sa da rai&, fa.a1
posGordem(sa)A
processa(rai&)A

#ercursos em rvores
(percursos)

Percurso em largura

3am0m chamado de percurso em ordem de n9vel

/tili&a uma fila para arma&enar a ordem em ue os n$s


devem ser acessados

Algoritmo
largura(8o rai&)H
f.enfileire(rai&)
Enuanto f no estiver va&ia, fa.a1
no B f.desenfileire()A
processa (no)A
para cada filho fi de no (da esuerda para a
direita), fa.a1
f.enfileire(fi)A

#ercursos em rvores
(percursos)

E!emplo

Pr'ordem1 A,C,6,#,E,-,*,D,I

5rdem1 C,6,A,-,E,*,#,I,D

P$s'ordem1 6,C,-,*,E,I,D,#,A

Iargura1 A,C,#,6,E,D,-,*,I
A
6
- * I
C #
D E

rvores "inrias de "usca
(definio)

"rvore Cinria de Cusca

J uma rvore 0inria ordenada

A rvore 0inria de 0usca tem os filhos ordenados segundo


um certo critrio

"rvore Cinria (de Cusca) vs "rvores

5s n$s de uma rvore 0inria no podem ter mais de dois


filhos, enuanto no h limites para o n4mero de filhos de
uma rvore

rvores "inrias de "usca
(opera$es)

5pera.Ees

6riar

Esva&iar

Inserir

%emover

Cuscar

Etc.

rvores "inrias de "usca
(percursos)

Percurso pr'ordem

Fisite,percorra a rai&, e depois

Percorra em pr'ordem a su0rvore da esuerda, e depois

Percorra em pr'ordem a su0rvore da direita

Percurso em ordem

Percorra em ordem a su0rvore da esuerda, e depois

Fisite,percorra a rai&, e depois

Percorra em ordem a su0rvore da direita

Percurso p$s'ordem

Percorra em p$s'ordem a su0rvore da esuerda, e depois

Percorra em p$s'ordem a su0rvore da direita, e depois

Fisite,percorra a rai&, e depois



rvores "inrias de "usca
(percursos)

Percurso em largura

Enfileire o n$ rai&

Enuanto a fila no estiver va&ia

#esenfileire o n$ n

Fisite, processa n

Enfileire o filho da esuerda de n

Enfileire o filho da direita de n



rvores "inrias de "usca
(rvores de express$es)

E!pressEes contendo operadores 0inrios possuem


inerentemente uma estrutura de rvore

P$s'ordem1 A C 6 K : A C : 6 K , (forma p$s'fi!ada)

Pr'ordem1 , : A K C 6 K : A C 6 (forma pr'fi!ada)

Em ordem1 A : C K 6 , A : C K 6 (forma infi!ada)



rvores "inrias de "usca
(busca)

5s elementos da rvore 0inria esto ordenados, ento a


0usca na rvore fa& uso de um algoritmo simples

6ompare o elemento com a rai&

2e for igual, pare a 0usca

2e for menor, 0usue na su0rvore da esuerda

2e for maior, 0usue na su0rvore da direita

6usto mdio de uma 0usca 0inria1 5(log n)



rvores "inrias de "usca
(busca)

Algoritmo1
0usca(rai&,dado)
if (rai& BB null)
return nullA
if(rai&.dado L dado)
return 0usca(rai&.esuerda,dado)A
if(rai&.dado M dado)
return 0usca(rai&.direita,dado)A
return rai&A

rvores "inrias de "usca
(busca)

Procurando um n4mero

rvores "inrias de "usca
(busca)

Procurando uma palavra



rvores "inrias de "usca
(insero)

Inser.o de um novo n$

A locali&a.o do ponto de Ninser.oN semelhante O 0usca por


um valor na rvore

Ap$s a inser.o do novo elemento, a rvore deve manter as


propriedades de rvore 0inria de 0usca

5 n$ inserido sempre uma folha



rvores "inrias de "usca
(insero)

Inser.o de um novo n$

rvores "inrias de "usca
(insero)

Inser.o de um novo n$

rvores "inrias de "usca
(insero)

Algoritmo para inserir um n$


inserirGnaGAC (rai&, dado)
if(rai&.dado L dado)H
if(rai&.esuerda BB null)H
rai&.esuerda B novo elemento com dado
PelseH
inserirGnaGAC(rai&.esuerda,dado)A
P
elseH
if(rai&.direita BB null)H
rai&.direita B novo elemento com dado
PelseH
inserirGnaGAC(rai&.direita,dado)A
P
P

rvores "inrias de "usca
(remoo)

%emo.o de um n$

E!istem tr7s situa.Ees na remo.o de um n$

8$ com < filhos

8$ com ; filho

8$ com = filhos

-uso

6$pia

rvores "inrias de "usca
(remoo)

%emo.o de um n$ com < filhos (folha)

5 n$ simplesmente retirado, e seu pai rece0e nulo no


lugar do ponteiro para auele filho
' C

rvores "inrias de "usca
(remoo)

%emo.o de um n$ com ; filho

5 n$ retirado e em seu lugar toda a su0rvore cu@a rai&


seu filho toma o lugar

5 pai do n$ a ser retirado aponta para o fillho do n$ a


ser retirado
' A

rvores "inrias de "usca
(remoo)

%emo.o de um n$ com = filhos (-uso)

E!trai uma rvore das duas su0rvores do n$ a ser


eliminado1 essa rvore vai su0stituir o n$ e seus
descendentes
;)5 maior n$ da su0rvore esuerda passa a ser a rai&
da su0rvore direitaA ou
=)5 menor n$ da su0rvore direita passa a ser a rai& da
su0rvore esuerda
2olu.o ;) 2olu.o =)

rvores "inrias de "usca
(remoo)

(#es)vantagens da remo.o por fuso



rvores "inrias de "usca
(remoo)

%emo.o de um n$ com = filhos (6$pia)

5 n$ no retirado, mas tem seu conte4do alterado

J su0stitu9do pelo elemento antecessor ou sucessor


;)Para encontrar o n$ antecessor, desce para a
su0rvore da esuerda do n$ a ser retirado e caminhe
at o final da su0rvore da direita
=)Para encontrar o n$ sucessor, desce para a
su0rvore da direita do n$ a ser removido e caminhe
at o final da su0rvore da esuerda

Ap$s isso, o su0stituto removido conforme o n4mero de


filhos (< ou ;)

rvores "inrias de "usca
(remoo)

%emo.o de um n$ com = filhos (6$pia)

6om a ocorr7ncia de muitas adi.Ees e remo.Ees em uma


rvore de 0usca, a mesma ter um dos lados maior ue o outro

-icar des0alanceada, diminuindo sua efici7ncia


2olu.o ;) 2olu.o =)

rvores "inrias de "usca
(outras opera$es)

5utras opera.Ees em rvores de 0usca1

Algoritmo para encontrar o maior elemento

Algoritmo para encontrar o menor elemento

6ontar o n4mero de elementos

2omar os valores dos elementos

Imprimir os elementos em ordem crescente

Imprimir os elementos em ordem decrescente

Etc...

rvores "inrias de "usca
(efici%ncia)

A efici7ncia de uma rvore 0inria como estrutura de 0usca


depende da disposi.o de seus elementos

Qual o pior caso R



rvores "inrias de "usca
(efici%ncia)

3empo mdio de uma 0usca, inser.o ou remo.o1 5(log n)

S no pior caso1 5(n)

5 pro0lema com rvores de 0usca ue mesmo o tempo


mdio sendo 5(log n), no sa0emos sa0emos nada so0re a
forma da rvore

2olu.o1 0alanceamento

rvores "inrias "alanceadas
(definio)

"rvore 0inria 0alanceada1 para cada n$, as alturas de suas


su0rvores diferem de, no m!imo, ;.

J a rvore com a menor altura para o seu n4mero de n$s.



rvores "inrias "alanceadas
(definio)

"rvore 0inria 0alanceada1 para cada n$, as alturas de suas


su0rvores diferem de, no m!imo, ;.

J a rvore com a menor altura para o seu n4mero de n$s.



rvores "inrias "alanceadas
(algoritmo)
0oolean 0alanceada (8o rai&)H
if(rai& BB null)H retorne verdadeiroA P
if(T0alanceada(rai&.es))H retorne falsoA P
if(T0alanceada(rai&.dir))H retorne falsoA P
if(a0s(altura(rai&.es) +
altura(rai&.dir)) L ;)H
retorne falsoA
P
retorne verdadeiroA
P

rvores "inrias "alanceadas
(custo)

5 o0@etivo desta rvore estruturar os dados de forma ue a


pesuisa 0inria se@a eficiente

rvores "inrias "alanceadas
(custo)

5 custo da maioria das opera.Ees depende diretamente da


altura da rvore, por isso o dese@o de se ter a menor altura
poss9vel

rvores "inrias "alanceadas
(balanceamento)

Algoritmos para 0alanceamento

Esttico1 destruir a estrutura da rvore e contrui'l


0alanceada

Fetor

#2U (#aV,2tout,Uarren)

#inmico1 0alanceamento @unto as opera.Ees

AFI (Adelson'FelsWii e E.X. Iandis)

%u0ro'negra

rvores "inrias "alanceadas
(vetor)

5s dados da rvore so arma&enados em um


vetor (ou lista), ordenados, e outra rvore
construda a partir deste vetor

rvores "inrias "alanceadas
(&'()

AFI (Adelson'FelsWii e E.X. Iandis)

2e dissermos ue uma rvore 0inria 0alanceada se as


su0rvores esuerda e direita de cada n$ tiverem a mesma
altura, ento as 4nicas rvores 0alanceadas sero as rvores
0inrias perfeitas.

6ondi.o de 0alan.eamento AFI1 /ma rvore 0inria va&ia


0alanceada AFI. /ma rvore no'va&ia, 3 B Hr, 3l, 3rP,
0alanceada AFI se tanto 3l uanto 3r forem 0alanceadas AFI
e YDl + DrY MB ;, onde Dl a altura de 3l e Dr a altura de 3r.

Idia 0sica1 cada n$ mantm uma informa.o adicional,


chamada fator de 0alanceamento, ue indica a diferen.a de
altura entre as su0rvores esuerda e direita.

rvores "inrias "alanceadas
(&'()

E!emplos1

rvores "inrias "alanceadas
(&'()

8as opera.Ees de inser.o e remo.o de elementos, o


0alanceamento da rvore resultante a@ustado atravs da
opera.o de rota.o, ue preserva a ordena.o da rvore.

rvores "inrias "alanceadas
(&'()

Propriedades da rota.o1

A rota.o no destr$i a propriedade de ordena.o dos


dados

#epois da rota.o, os n$s rotacionados ficam com fator de


0alan.o &ero

#epois da rota.o, a rvore continua com a mesma altura


ue tinha anteriormente (antes da inser.o ue
des0alanceou a rvore)

rvores "inrias "alanceadas
(&'()

Quatro tipos de rota.Ees

%ota.o %% simples1 as duas primeiras arestas no caminho


da inser.o vo para a direita (n$ des0alanceado com um
fator de 0alan.o negativo e su0rvore da esuerda com
fator negativo)

%ota.o II simples1 oposto do anterior ' n$ des0alanceado


com um fator de 0alan.o positivo e su0rvore da direita com
fator positivo

%ota.o %I dupla1 n$ des0alanceado com um fator de


0alan.o negativo e su0rvore da esuerda com fator
positivo

%ota.o I% dupla1 n$ des0alanceado com um fator de


0alan.o positivo e su0rvore da direita com fator negativo

rvores "inrias "alanceadas
(&'()

%ota.o %% simples (Al, Ar e Cr com a mesma altura h)


Al
A
C
Ar
Cr
' ;
<
Al
A
C
Ar
Cr
' =
' ;
%
%
Inserir elemento em Al
h
h
h
h : ;
h
h : ;
h : =
h

rvores "inrias "alanceadas
(&'()

%ota.o %% simples (Al, Ar e Cr com a mesma altura h)


Al
A
C
Ar
Cr
' =
' ;
%
%
%ota.o %%
h
h : ;
h : =
h
<
<
Al
C
A
Ar
Cr
h h
h : ;
h : ;

rvores "inrias "alanceadas
(&'()

%ota.o %% simples (Algoritmo)


rotaciona%%(8o n)H
8o temp B n.direitaA
n.direita B n.esuerdaA
n.esuerda B n.direita.esuerdaA
n.direita.esuerda B n.direita.direitaA
n.direita.direita B tempA
#ado temp# B n.dadoA
n.dado B n.direita.dadoA
n.direita.dado B temp#A
P

rvores "inrias "alanceadas
(&'()

%ota.o II simples

J o oposto da rota.o %%

%ota.o %I

Primeiro fa&'se uma rota.o II na su0rvore da esuerda


do n$ des0alanceado

#epois uma rota.o %% no n$

%ota.o I% ( o oposto da %I)

Primeiro fa&'se uma rota.o %% na su0rvore da direita do


n$ des0alanceado

#epois uma rota.o II no n$



rvores "inrias "alanceadas
(&'()

6omo vimos, ap$s uma inser.o pode ser necessrio fa&er


alguma rota.o na rvore para mant7'la 0alanceada.

N2o0eN a rvore (pelo caminho da insser.o) atuali&ando os


fatores de 0alanceamento e fa&endo as rota.Ees
necessrias

8o caso da remo.o, 0asta atuali&ar os fatores de


0alanceamento e verificar se precisa alguma rota.o, da
seguinte forma1

%emove por c$pia

N2o0eN a rvore atuali&ando o fator de 0alanceamento dos


n$s1

2e for :; ou ';, esta 0alanceada, pode'se parar.

2e for <, a altura diminuiu, preciso continuar.

2e for := ou '=, est des0alanceada, preciso uma


rota.o e atuali&a.o.

rvores )en*ricas

/ma arvore generica pode possuir um n4mero ar0itrrio de filhos


por n$

6omo implementar se no sa0emos a uantidade de filhosR

/sando vetores, listas

5u ainda usando a mesma estrutura da rvore 0inaria com


diferentes signicados

rvores )en*ricas

Aplica.o1 *ame 3rees

*ame 3rees so rvores ue representam as possi0ilidades


de @ogadas para um @ogador a partir de um estado do @ogo

Primeiro n9vel1 estado atual do @ogo

2egundo n9vel1 @ogadas poss9veis do @ogador


(computador)

3erceiro n9vel1 @ogadas poss9veis do oponente

Quarto1 @ogadas do @ogadorA Quinto1 @ogadas do


oponenteA e assim por diante.

5s fillhos de um n$ representam todas as possi0ilidades a


partir dauela situa.o do @ogo

-un.o de avalia.o ue retorna um valor representando o


uao 0om est um estado do @ogo (configura.o do ta0uleiro)

Altura da rvore indica o n4mero de @ogadas adiante ue se


dese@a prever

rvores )en*ricas

Aplica.o1 *ame 3rees

*ame tree do @ogo da velha

A fun.o de avalia.o retorna o valor do numero de linhas,


colunas e diagonais a0ertas para o @ogador (computador)
menos o n4umero de linhas, colunas e diagonais a0ertas ao
adversrio

rvores )en*ricas

Aplica.o1 *ame 3rees

Para determinar a melhor @ogada, utili&a'se o mtodo minima!

Quanto maior for o valor da fun.o de avalia.o, maior


sero as chances do @ogador vencer

Quanto menor for o valor, maior sero as chances do


oponente vencer

5 o0@etivo tentar ma!imi&ar o valor dado pela fun.o


avalia.o, i.e., selecionar a @ogada ue garanta a melhor
situa.o ao fim de n @ogadas

5 o0@etivo alcan.ado propagando o valor


correspondendo ao melhor estado at ao n$ rai&

Este valor corresponde ao ganho m9nimo ue se o0tm se


optarmos pela @ogada correta

rvores )en*ricas

Aplica.o1 *ame 3rees

6onsideremos um pro0lema genrico, onde os n$s


representam estados e os ramos representam as @ogadas
poss9veis a partir de cada estado. 5s valores associados aos
n$s folha so o0tidos por uma fun.o de avalia.o

rvores )en*ricas

Aplica.o1 *ame 3rees

Algoritmo minima!1

2e n$ for folha1 retorna o valor da fun.o de avalia.o

2e n$ representa @ogada do oponente1 e!ecuta'se


minima! recursivamente em cada filho e retorna o menor
valor encontrado

2e n$ representa @ogada do @ogador1 e!ecuta'se minima!


recursivamente em cada filho e retorna o maior valor
encontrado

+eaps

Estrutura de dados a0strata, derivada da rvore, ue satisfa& a


propriedade1

2e C filho de A, ento C.chave MB A.chave (heap de m!imo)

2e C filho de A, ento C.chave LB A.chave (heap de m9nimo)

Pode ser construda em tempo linear.

8o h restri.Ees uanto ao n4mero de filhos por n$

8a prtica1 =
(heaps 0inrias)

+eaps

5pera.Ees comuns1

0usca'ma!1 encontra o m!imo item (ou 0usca'min)

remove'ma!1 remove a rai& (ou remove'min)

insere1 insere um novo valor

fuso1 une duas heaps (como uma heap)



+eaps

Implementa.o

A forma mais eficiente de implementar uma heap


usando um vetor

,ilas de #rioridade

/ma heap a estrutura mais eficiente para implementar uma fila


de prioridade

/ma fila de prioridade uma lista de itens na ual cada item est
associado a uma prioridade

Em geral, itens distintos possuem prioridades diferentes

5s itens so inseridos na fila de prioridade em uma $rdem


ar0itrria ualuer, mas so removidos de acordo com sua
prioridade

5pera.Ees1 enfileirar, encontraXaiorPrioridade,


removeXaiorPrioridade.

E!emplo de utili&a.o1 softZare de gerenciamento da impressora

Você também pode gostar