You are on page 1of 23

rvores

Fac. Cincias Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Hoje
!

rvores e suas propriedades


!

Travessia prefixa, infixa, sufixa e em largura.

rvores binrias:
!
!

especificao
implementao utilizando ns ligados entre si

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores
!

At agora vimos agrupamentos de dados LINEARES

! Com acesso aos elementos em tempo O(n)


! Agora vamos ver agrupamentos de dados que so NO-

LINEARES, ou HIERRQUICOS

Em vez de cada n ter apenas UM SUCESSOR, um n de


uma rvore pode ter MLTIPLOS SUCESSORES; mas s
pode ter UM PREDECESSOR.

! Como na Natureza, numa rvore h um nico tronco que se

ramifica em mltiplos ramos.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Uso das rvores


! Como as rvores tm estrutura hierrquica, usamo-las

para representar organizaes hierrquicas de


informao, como
!
!
!

uma hierarquia de classes;


uma directoria de um disco e as suas subdirectorias;
uma rvore genealgica.
programs
Microsoft office

Office

Templates

Netscape
Chrome

Cool

Plugins

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores binrias
!

Cada elemento tem no mximo 2 sucessores.

Pode-se fazer armazenagem numa rvore binria de


forma ordenada

! A procura numa rvore binria muito mais eficiente

do que numa lista linear: O(log n) em vez de O(n).

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Terminologia
! Uma rvore uma coleco de ns, cada um ligado aos seus

sucessores.

! O n no topo chama-se RAIZ


! As ligaes entre ns chamam-se RAMOS
!

Os sucessores de um n chamam-se FILHOS

! O predecessor chama-se PAI


!

Cada n tem um pai, excepto a raiz

! Um n sem filhos chama-se uma FOLHA (ou n externo)


!

Os outros so ns internos
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Mais terminologia
! Uma generalizao da relao pai-filho o ANTEPASSADO-

DESCENDENTE
!

Se A pai de B, que pai de C, ento A antepassado de C e C


desdendente de A.

! Uma SUB-RVORE de um n a rvore cuja raiz filha

desse n.

! O NVEL (ou PROFUNDIDADE) de um n a medida da

sua distncia da raiz.


!
!

Se n a raiz da rvore T, o seu nvel 1


Caso contrrio o seu nvel 1+o nvel do seu pai

! A ALTURA de uma rvore o nmero de ns do caminho

mais longo desde a raiz at uma folha


!
!

Se a rvore est vazia a sua altura 0


C.c. a altura o mximo nvel dos seus ns
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Exemplo
dog
Filho de dog, pai de canine
cat
e irmo de wolf

O n raiz, pai de cat e wolf,


antepassado de canine

Nvel 1

wolf

Nvel 2

Um n folha, filho de dog


e irmo de cat
Nvel 3

canine

Um n folha, filho de cat,


descentente de dog

Sub-rvore de dog

Altura desta rvore = 3

Sub-rvore de cat

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores binrias
! Um conjunto de ns T uma rvore binria se um dos

seguintes for verdadeiro


! T vazia
! Se T no vazia a sua raiz tem duas sub-rvores TL e TR

que so rvores binrias.

! (TL e TR so a sub-rvore esquerda e direita, resp.)

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

No exemplo

= rvore vazia
dog

cat

wolf

canine

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Expresso algbrica
! (x + y) * ((a + b) / c)
*

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Travessias
! Uma travessia consiste em visitar (e possvelmente

processar) todos os ns de uma rvore.

! So usuais:
!
Infixa
!
Prefixa
!
Sufixa
! E ainda
!
Em profundidade primeiro
!
Em largura primeiro

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Travessias
!

Seja a rvore T com sub-rvores TL e TR.

Travessia prefixa:
!

Travessia infixa:
!

Visitar o n raiz, travessia de TL e depois travessia de TR.


Travessia de TL, visitar o n raiz, travessia de TR.

Travessia sufixa:
!

Travessia de TL, travessia de TR, visitar o n raiz.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Algoritmo travessia
!

Prefixa

! Se a rvore est vazia termina


! C.c.
!

Visita a raiz
Travessia prefixa da subrvore esquerda

Travessia prefixa da subrvore direita

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Exemplo passeio de Euler

Registamos o n quando o vemos: prefixa: a b d g e h c f i j


Registamos o n quando regressamos da subrvore esquerda: infixa: d g b h e a i f j c
Registamos o n quando o vemos pela ltima vez: sufixa: g d h e b i j f c a
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Travessia de rvores binrias


! Uma travessia infixa de uma rvore binria de pesquisa

resulta nos ns serem visitados por ordem crescente de


valor

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores de expresses
*

Travessia infixa desta rvore d


x + y * a + b / c.

Colocando os parntesis d
(x + y) * ((a + b) / c)

Travessia sufixa: x y + a b + c / *

Travessia prefixa: * + x y / + a b c

+
x

+
a

c
b

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

pg 408, Exerccio 1 (8.2)


40

40

30

32

30

55

32

55

35

50

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Especificao das rvores


!

empty constri uma rvore vazia

Compound com um dado e duas rvores constri uma rvore

isEmpty verifica se a rvore est vazia

root devolve a raiz de uma rvore no vazia

leftSubTree devolve a sub-rvore esquerda de uma rvore no vazia

rightSubTree devolve a sub-rvore direita de uma rvore no vazia

isLeaf esta rvore contem apenas um n?

height obtm o nmero de ns do caminho mais longo desde a raiz a


uma folha

isBalanced se a altura das suas sub-rvores difere no mximo de 1, e as


sub-rvores so elas prpris balanceadas.
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

especificao
specification
sorts
B i n a r yT r e e
constructors
empty : > B i n a r y T r e e ;
make : Element B i n a r yT r e e B i n a r yT r e e > B i n a r y T r e e ;
observers
isEmpty : B i n a r y T r e e ;
r o o t : Bi n a r y T r e e >? Element ;
l e f t S u b t r e e : B i n a r yT r e e >? B i n a r yT r e e ;
r i g h t S u b t r e e : B i n a r y T re e >? B i n a r y Tr e e ;
others
i s L e a f : B i n ar y T r e e ;
h e i g h t : B i n ar y T r e e > i n t ;
i s Ba l a n c ed : B i n a r y T re e ;
domains
T : BinaryTree ;
r o o t ( T ) i f not isEmpty ( T ) ;
l e f t S u b t r e e ( T ) i f not isEmpty ( T ) ;
r i g h t S u b t r e e ( T ) i f not isEmpty ( T ) ;
axioms
T1 , T2 : B i na r y T r e e ; X : Element
;
Luis Antunes
Algoritmos e Estruturas de Dados
isEmpty ( empty ( ) ) ;
not isEmpty ( make ( X , T1 , T2 ) ) ;
r o o t ( make ( X , T1 , T2 ) ) = X ;

Fac. Cincias
Univ. Lisboa

h e i g h t : B i n ar y T r e e > i n t ;
i s Ba l a n c ed : B i n a r y T re e ;
domains
T : BinaryTree ;
r o o t ( T ) i f not isEmpty ( T ) ;
l e f t S u b t r e e ( T ) i f not isEmpty ( T ) ;
r i g h t S u b t r e e ( T ) i f not isEmpty ( T ) ;
axioms
T1 , T2 : B i na r y T r e e ; X : Element ;
isEmpty ( empty ( ) ) ;
not isEmpty ( make ( X , T1 , T2 ) ) ;
r o o t ( make ( X , T1 , T2 ) ) = X ;
l e f t S u b t r e e ( make ( X , T1 , T2 ) ) = T1 ;
r i g h t S u b t r e e ( make ( X , T1 , T2 ) ) = T2 ;
i s L e a f ( T ) i f f not isEmpty ( T ) and
isEmpty ( l e f t S u b t r e e ( T ) ) and
isEmpty ( r i g h t S u b t r e e ( T ) ) ;
h e i g h t ( empty ( ) ) = 0 ;
h e i g h t ( make ( X , T1 , T2 ) ) =
1 + max ( h e i g h t ( T1 ) , h e i g h t ( T2 ) ) ;
i s Ba l a n c ed ( empty ( ) ) ;
i s Ba l a n c ed ( make ( X , T1 , T2 ) ) i f
i s Ba l a n c ed ( T1 ) and i s B al a n c ed ( T2 ) and
abs ( h e i g h t ( T1 ) h e i g h t ( T2 ) ) <= 1 ;
end s p e c i f i c a t i o n

especificao

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Figure 4.1: A specification for a binary tree of arbitrary elements.

refinement
refinement
Element i s class O b j e c t
B i n a r y T r e e i s class L i n k e d B i n a r y T r e e {
empty : > B i n a r y T r e e i s L i n k e d B i n a r y T r e e ( ) ;
compound : e : Element l : B i n a r y T r e e r : B i n a r y T r e e >
BinaryTree is LinkedBinaryTree ( Object e ,
LinkedBinaryTree l , LinkedBinaryTree r ) ;
r o o t : B i n a r y T r e e >? Element i s O b j e c t data ( ) ;
l e f t S u b t r e e : B i n a r y T r e e >? r e t u r n : B i n a r y T r e e i s
LinkedBinaryTree l e f t S u b t r e e ( ) ;
r i g h t S u b t r e e : B i n a r y T r e e >? r e t u r n : B i n a r y T r e e i s
LinkedBinaryTree r i g h t S u b t r e e ( ) ;
isEmpty : B i n a r y T r e e i s boolean isEmpty ( ) ;
i s L e a f : B i n a r y T r e e i s boolean i s L e a f ( ) ;
h e i g h t : B i n a r y T r e e > i n t i s i n t h e i g h t ( ) ;
i s B a l a n c e d : B i n a r y T r e e i s boolean i s B a l a n c e d ( ) ;
}
end refinement

Figure 4.2: A refinement binding for the binary tree module.


Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Classe imutvel
! A operaes no-construtoras que devolvem um gnero

BinaryTree passam a ser mtodos cuja tipo de retorno


MapBinaryTree em vez de void.

Quando vemos um mtodo em java com assinatura da


forma LinkedBinaryTree leftSubTree()
assumimos imediatamente que a rvore da esquerda
devolvida e o objecto alvo fica inalterado.

! No refinamento, a keyword return: especifica que o

resultado da especificao DEVOLVIDO pelo


mtodo (no alterado no objecto alvo).

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

You might also like