Anda di halaman 1dari 19

8.

rvores

Fernando Silva

DCC-FCUP

Estruturas de Dados

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 1 / 38

rvores - estruturas no lineares (1)

Uma lista um exemplo de uma estrutura de dados linear, pois cada


elemento tem:
I um predecessor nico, excepto o primeiro elemento da lista;
I tem um sucessor nico, excepto o ltimo elemento da lista.
As pilhas e filas so outros exemplos.
Existem outros tipos de estruturas?
Um grafo uma estrutura de dados no-linear, pois os seus
elementos, designados por ns, podem ter mais de um predecessor ou
mais de um sucessor.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 2 / 38


rvores - estruturas no lineares (2)

As rvores so um caso especial de grafos, em que que cada


elemento (n) tem zero ou mais sucessores, mas tem
apenas um predecessor, excepto o primeiro n, a raiz da rvore.

So estruturas naturalmente adequadas para representar informao


organizada em hierarquias.
I Um exemplo comum a estrutura de directrios (ou pastas) de
umsistema de ficheiros.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 3 / 38

rvores - definio

Uma rvore um grafo constitudo por um conjunto de ns e um


conjunto de arcos que ligam pares de ns, em que:
I cada arco liga um n-pai a um ou mais ns-filho;
I todos os ns, com excepo da raz, tm um n-pai.
Definio recursiva:
Uma rvore T de aridade n constituda por um conjunto finito de
ns, tal que:
I ou o conjunto vazio, T = ; ou
I consiste de uma raz r e de n 0 sub-rvores distintas,
T = {r , T0 , T1 , . . . , Tn1 }.
F as sub-rvores Ti so rvores cujos ns raz ri so ns-filho de r .

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 4 / 38


rvores - conceitos/terminologia

ao predecessor (nico) de um n, chama-se n-pai


os seus sucessores so os ns-filho
o grau de um n o nmero sub-rvores (ou ns-filho) que
descendem desse n.
um n-folha no tem filhos, tem grau 0.
um n-raiz no tem pai
os arcos que ligam os ns, chamam-se ramos
Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 5 / 38

rvores - terminologia

chama-se caminho a uma sequncia de ramos entre dois ns


I Uma propriedade importante de uma rvore que existe um e apenas
um caminho entre dois quaisquer ns de uma rvore.
o comprimento de um caminho o nmero de ramos nele contido
a profundidade de um n n o comprimento do caminho de n at
raz; a profundidade da raz zero.
a altura de um n o comprimento do caminho desde esse n at ao
seu n-folha mais profundo (a altura de um n folha zero).
a altura de uma rvore a altura da raz (i.e. o comprimento do
maior caminho de um n-folha at raz).

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 6 / 38


rvores Binrias - definio informal

Uma rvore-binria constituda por um conjunto finito de ns. Se o


conjunto for vazio, a rvore diz-se vazia, caso contrrio obdece s
seguintes regras:
1 possui um n especial, a raiz da rvore.
2 cada n possui no mximo dois filhos, filho-esquerdo e filho-direito.
3 cada n, excepto a raz, possui exactamente um n-pai.
ou dito de forma mais simples,
rvores binrias so rvores em que cada n tem 0, 1 ou 2 filhos.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 7 / 38

rvores Binrias - conceitos

Uma rvore binria totalmente preenchida uma rvore binria


em que todos os ns, excepto os ns-folha, tm 2 filhos.
Uma rvore binria perfeita uma rvore binria totalmente
preenchida em que todos os ns-folha esto mesma profundidade.
Uma rvore binria completa uma rvore-binria em que todos os
nveis, excepto possivelmente o ltimo, esto completamente
preenchidos e todos os ns esto o mais esquerda possvel.

A profundidade de uma rvore binria determinada pelo maior nvel


de qualquer n folha.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 8 / 38


Profundidade de rvores Binrias (1)

Como determinar o nmero de ns de uma rvore binria perfeita de


profundidade d?
I O nmero de ns total a soma dos ns dos nveis de 0 a d, i.e.
nvel 0 20 = 1 n
nvel 1 21 = 2 ns
... ... ...
nvel d 2d ns
Pd
Soma 20 + 21 + 22 + . . . + 2d = j=0 2j
Por induo, Soma= 2d+1 1.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 9 / 38

Profundidade de rvores Binrias (2)

Conhecido o nmero de ns de uma rvore binria perfeita, possvel


determinar a sua profundidade d:
I n = 2d+1 1 = d = log2 (n + 1) 1
I Exemplos:
F 10 = log2 (1024)
F 20 = log2 (1000000)
Portanto, apesar de uma rvore binria poder conter muitos ns, a
distncia da raiz a qualquer folha relativamente pequena.
Isto excelente pois significa que os algoritmos sobre rvores (inserir,
remover, procurar), requerem apenas percorrer um caminho cuja
profundidade logartmica no nmero de ns da rvore determinando
a complexidade do algoritmo.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 10 / 38


rvore binrias em Java (1)

A caracterizao de um n determinante.
Vejamos primeiro uma figura a ilustrar o encadeamento de ns de
uma rvore de caracteres.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 11 / 38

rvores Binrias em Java (2) class BTNode

A rvore fica definida pelo encadeamento de ns do tipo BTNode.


Definio para valores inteiros:

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 12 / 38


rvores Binrias em Java (2) class BTNode<E>
Vejamos a definio genrica para um n de uma rvore:

Com a definio da classe BTNode podemos organizar todas os mtodos


sobre rvores.
A comparao de objectos do tipo E requer que esteja implementado o
mtodo compareTo() na classe que define E.
Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 13 / 38

rvores Binrias em Java (3) mtodos

Alguns mtodos:

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 14 / 38


rvores Binrias em Java (4) classe BTree
Representao mais completa de rvore com duas classes, uma caracteriza
um n e outra define a rvore (protege a raz).

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 15 / 38

rvores Binrias em Java (5) classe BTree


Representao de rvore com a definio do n interna classe rvore.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 16 / 38


rvores Binrias em Java (5) classe BTree

Vantagens de usar duas classes:


definio mais clara de rvore vazia e raz da rvore,
atributo raz fica mais protegido,
atributos do BTNode no ficam acessveis a outras classes.
Template os mtodos da classe BTree, com a classe BTNode interna:

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 17 / 38

rvores Binrias de Pesquisa definio

Uma rvore binria T diz-se de pesquisa se:


T for vazia, ou
cada n de T contm uma chave que satisfaz as condies seguintes:
I todas as chaves (se existirem) na sub-rvore esquerda da raz precedem
a chave da raz,
I a chave da raz precede as chaves (se existirem) na sub-rvore direita,
I as sub-rvores esquerda e direita da raz tambm so rvores de
pesquisa.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 18 / 38


rvores Binrias de Pesquisa - exemplo construo
Munidos da definio, podemos agora construir uma rvore binria de
pesquisa:
o primeiro valor fica na raz da rvore.
os seguintes so esquerda ou direita da raz, obedecendo relao
de ordem, como folhas e em nveis cada vez mais baixos.

Sequncia de valores dada:


14,18,4,9,7,16,3,5,4,17,20,15,9,5

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 19 / 38

rvores Binrias de Pesquisa - exemplo visita


Interessante notar que:
Percorrendo esta rvore com determinado critrio, permite-nos obter
a mesma sequncia ordenada por ordem crescente.
Trata-se de uma visita em profundidade (ou depth-first).

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 20 / 38


rvores Binrias de Pesquisa (1) - insertBTNode()
A construo de uma rvore faz-se, invocando o mtodo insertBTNode()
para cada novo valor a inserir. Consideramos o valor do n como int.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 21 / 38

rvores Binrias de Pesquisa (2) - insertBTNode()


Mtodo insertBTNode() em que o valor de BTNode um objecto
genrico que implementa Comparable.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 22 / 38


rvores Binrias de Pesquisa - exemplo inserir

Ilustrao do percurso na rvore quando se pretende inserir um dado valor.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 23 / 38

rvores Binrias de Pesquisa - BuildTree

Classe principal l do standard-input uma sequncia de inteiros e constri a


rvore e depois imprima os valores inorder.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 24 / 38


rvores binrias visita em profundidade

As regras de construo de uma rvore binria de pesquisa garantem que a


informao em todos os ns da sub-rvore esquerda menor do que a raiz
que por sua vez menor ou igual do que qualquer dos valores na
sub-rvore direita.
O mtodo de pesquisa inorder particularmente til para pesquisar os ns
de uma rvore de pesquisa binria em que a ordem dos valores (chaves de
pesquisa) crescente. Assim como permite listar por ordem a sequncia de
valores da rvore.
O mtodo de pesquisa inorder (ou depth-first) consiste em visitar a
rvore do seguinte modo:
(a) sub-rvore esquerda
(b) raiz
(c) sub-rvore direita

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 25 / 38

Implementao da visita inorder

A pesquisa inorder equivale a fazer-se o seguinte percurso:

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 26 / 38


Visitas Preorder e Postorder

Mtodo preorder:
(a) visitar a raiz
(b) pesquisar em preorder a sub-rvore esquerda
(c) pesquisar em preorder a sub-rvore direita
Mtodo postorder:
(a) pesquisar em postorder a sub-rvore esquerda
(b) pesquisar em postorder a sub-rvore direita
(c) visitar a raiz
Exerccio: implemente estes mtodos de pesquisa.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 27 / 38

rvores Binrias de Pesquisa: procura

Dada uma rvore binria de pesquisa t e um valor x, pretende-se verificar


se t contm x.
Quando se pensa em percorrer uma rvore, deve pensar-se numa soluo
recursiva em que temos de lidar com trs casos:
1 rvore vazia, pelo que a rvore t no contm x
2 n corrente contm x
3 continuar a procura numa das sub-rvores, de acordo com a relao
de ordem entre x e o valor no n corrente.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 28 / 38


rvores Binrias de Pesquisa: procura (2)

Implementao:

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 29 / 38

rvores Binrias de Pesquisa: remover (1)

Casos especiais para o n a remover:


n folha (e.g. remover o 15)
n-interior com apenas um filho (e.g. remover o 3)
n interior com dois filhos (e.g. remover o 14)

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 30 / 38


rvores Binrias de Pesquisa: remover (2)

A operao de remover um n que contm um valor x de uma rvore t,


caso tal n exista, um pouco mais complexa e requer:
1 localizar o n com o valor x, seja nx esse n;
2 se nx um n-folha, simplesmente remove-se o n;
3 se nx um n-interior, necessrio mais cuidado para no ficarmos
com 2 rvores desconexas:
I se nx s tiver um filho, a sub-rvore pendurada nesse n toma o lugar
de nx
I se nx tiver dois filhos, ento devemos procurar o n com menor valor
entre os descendentes do filho-direito (ou o maior dos descendentes do
filho-esquerdo) para tomar o lugar de nx.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 31 / 38

rvores Binrias de Pesquisa: remover (3)

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 32 / 38


rvores Binrias de Pesquisa: remover (4)

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 33 / 38

rvores Binrias: inorder no recursivo


Podemos fazer visitas depth-first (profundidade-primeiro) sem recurso.
Precisamos de uma pilha para guardar os ns durante a descida esquerda
de modo a serem recuperados posteriormente para se fazer a descida
direita.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 34 / 38


Pesquisa em largura-primeiro (breadth-first)
Um outro mtodo de percorrer os ns de uma rvore faz-lo por nveis,
i.e. em largura-primeiro (ou breadth-first).

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 35 / 38

rvores Binrias de Pesquisa: breadthFirst


A implementao deste algoritmo faz uso de uma fila onde se colocam os
filhos do n corrente. A fila garante que a ordem de visita no nvel
seguinte preservada.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 36 / 38


Exerccio com rvores: espelho (1)
Objectivo: escrever um mtodo em que dada uma rvore produza o
espelho dessa rvore.
Por espelho de uma rvore entenda-se uma outra rvore em que os
papeis das referncias para o filho-esquerdo e filho-direito esto
trocadas em todos os ns.
A figura ilustra 2 rvores, onde a 2a. o espelho da 1a.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 37 / 38

Exerccio com rvores: espelho (2)

Ver soluo completa na pgina dos apontamentos.

Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 38 / 38

Anda mungkin juga menyukai