Hoje
!
rvores binrias:
!
rvores de pesquisa
! O interface Comparable.
!
Fac. Cincias
Univ. Lisboa
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
Fac. Cincias
Univ. Lisboa
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
Fac. Cincias
Univ. Lisboa
Implementao
!
Node
left =
right =
data =
Fac. Cincias
Univ. Lisboa
Atributos e construtores
Fac. Cincias
Univ. Lisboa
Observadores
Fac. Cincias
Univ. Lisboa
Mais observers
Fac. Cincias
Univ. Lisboa
Observer: occurences
Fac. Cincias
Univ. Lisboa
isBalanced?
Fac. Cincias
Univ. Lisboa
isFull?
Fac. Cincias
Univ. Lisboa
isComplete?
Fac. Cincias
Univ. Lisboa
indexOf
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Exemplo toString
*
+
x
null
null
null
null
/
a
null
null
b
null
null"
Fac. Cincias
Univ. Lisboa
Um Iterador prefixo
!
non-static.
! As non-static so chamadas classes interiores (inner) e
Fac. Cincias
Univ. Lisboa
PrefixIterator
Fac. Cincias
Univ. Lisboa
PrefixIterator
Fac. Cincias
Univ. Lisboa
BreadthIterator (largura)
Fac. Cincias
Univ. Lisboa
Iterador em largura
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Formalmente
Fac. Cincias
Univ. Lisboa
! CC:
!
Fac. Cincias
Univ. Lisboa
Propriedades ABP
! As rvores crescem do topo para baixo, e cada novo
excepto as folhas.
! Se no est cheia pode ainda estar COMPLETA se a
Fac. Cincias
Univ. Lisboa
rvore completa
!
40
30
32
55
35
50 Luis Antunes
Fac. Cincias
Univ. Lisboa
Regra:
!
!
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Interface de SearchTree<E>
!
! E find (E target)
! Devolve uma referncia para o node que tem target como
data, se encontrar, c.c. devolve null
! E delete (E target)
! Remove e devolve o target se encontrar, c.c. devolve null
!
Fac. Cincias
Univ. Lisboa
O interface Comparable
! public interface Comparable<T> {
/**
* Metodo que compara este objecto
* com o objecto do argumento
* devolve
* um nm negativo se this < obj
* zero se this == obj
* nm positivo se this > obj
*/
int compareTo(T obj);
}"
Fac. Cincias
Univ. Lisboa
Impl.: BinarySearchTree
Fac. Cincias
Univ. Lisboa
Impl.: BinarySearchTree
Verso iterativa
Fac. Cincias
Univ. Lisboa
Find recursivo
Verso recursiva
Fac. Cincias
Univ. Lisboa
add recursivo
da especificao
Fac. Cincias
Univ. Lisboa
add iterativo
Fac. Cincias
Univ. Lisboa
Apagar um n
! Se o item a remover folha, basta que o seu pai mude a
filho
! Se tem 2 filhos, o item substitudo pelo maior item
Fac. Cincias
Univ. Lisboa
delete
Fac. Cincias
Univ. Lisboa
delete (cont.)
Fac. Cincias
Univ. Lisboa
findLargestChild
Fac. Cincias
Univ. Lisboa
exemplo
Fac. Cincias
Univ. Lisboa
exemplo
Fac. Cincias
Univ. Lisboa