You are on page 1of 36

8.

rvores
Fernando Silva
DCC-FCUP

Estruturas de Dados

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

1/1

rvores - estruturas no lineares (1)


Uma lista um exemplo de uma estrutura de dados linear, pois cada elemento tem:
um predecessor nico, excepto o primeiro elemento da lista; tem um sucessor nico, excepto o ltimo elemento da lista.

As pilhas e las 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/1

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.


Um exemplo comum a estrutura de directrios (ou pastas) de umsistema de cheiros.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

3/1

rvores - denio
Uma rvore um grafo constitudo por um conjunto de ns e um conjunto de arcos que ligam pares de ns, em que:
cada arco liga um n-pai a um ou mais ns-lho; todos os ns, com excepo da raz, tm um n-pai.

Denio recursiva:

Uma rvore T de aridade n constituda por um conjunto nito de ns, tal que:
ou o conjunto vazio, T = ; ou consiste de uma raz r e de n 0 sub-rvores distintas, T = {r , T0 , T1 , . . . , Tn1 }.
as sub-rvores Ti so rvores cujos ns raz ri so ns-lho de r .

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

4/1

rvores - conceitos/terminologia

ao predecessor (nico) de um n, chama-se n-pai os seus sucessores so os ns-lho o grau de um n o nmero sub-rvores (ou ns-lho) que descendem desse n. um n-folha no tem lhos, 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/1

rvores - terminologia
chama-se caminho a uma sequncia de ramos entre dois ns
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/1

rvores Binrias - denio informal


Uma rvore-binria constituda por um conjunto nito de ns. Se o conjunto for vazio, a rvore diz-se vazia, caso contrrio obdece s seguintes regras:
1 2 3

possui um n especial, a raiz da rvore. cada n possui no mximo dois lhos, lho-esquerdo e lho-direito. 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 lhos.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

7/1

rvores Binrias - conceitos


Uma rvore binria totalmente preenchida uma rvore binria em que todos os ns, excepto os ns-folha, tm 2 lhos. 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/1

Profundidade de rvores Binrias (1)


Como determinar o nmero de ns de uma rvore binria perfeita de profundidade d?
O nmero de ns total a soma dos ns dos nveis de 0 a d, i.e. nvel 0 nvel 1 ... nvel d Soma ... 20 = 1 n 21 = 2 ns ... 2d ns 20 + 21 + 22 + . . . + 2d =

d j=0

2j

Por induo, Soma= 2d+1 1.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

9/1

Profundidade de rvores Binrias (2)


Conhecido o nmero de ns de uma rvore binria perfeita, possvel determinar a sua profundidade d:
n = 2d+1 1 = d = log2 (n + 1) 1 Exemplos:
10 = log2 (1024) 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 signica 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 / 1

rvore binrias em Java (1)


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

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

11 / 1

rvores Binrias em Java (2) class BTNode


A rvore ca denida pelo encadeamento de ns do tipo BTNode. Denio para valores inteiros:

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

12 / 1

rvores Binrias em Java (2) class BTNode<E>


Vejamos a denio genrica para um n de uma rvore:

Com a denio da classe BTNode podemos organizar todas os mtodos sobre rvores.
Fernando Silva (DCC-FCUP) 8. rvores Estruturas de Dados 13 / 1

rvores Binrias em Java (3) mtodos


Alguns mtodos:

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

14 / 1

rvores Binrias em Java (4) classe BTree


Representao mais completa de rvore com duas classes, uma caracteriza um n e outra dene a rvore (protege a raz).

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

15 / 1

rvores Binrias em Java (5) classe BTree


Vantagens de usar duas classes: denio mais clara de rvore vazia e raz da rvore, atributo raz ca mais protegido, atributos do BTNode no cam acessveis a outras classes. Template para denir os mtodos da classe BTree:

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

16 / 1

rvores Binrias de Pesquisa denio


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:
todas as chaves (se existirem) na sub-rvore esquerda da raz precedem a chave da raz, a chave da raz precede as chaves (se existirem) na sub-rvore direita, as sub-rvores esquerda e direita da raz tambm so rvores de pesquisa.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

17 / 1

rvores Binrias de Pesquisa - exemplo construo


Munidos da denio, podemos agora construir uma rvore binria de pesquisa: o primeiro valor ca 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

18 / 1

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-rst).

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

19 / 1

rvores Binrias de Pesquisa - insertBTNode()


A construo de uma rvore faz-se, invocando o mtodo insertBTNode() para cada novo valor a inserir. Considerar relao de ordem .

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

20 / 1

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

21 / 1

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

22 / 1

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-rst) 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 23 / 1

Implementao da visita inorder

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

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

24 / 1

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

25 / 1

rvores Binrias de Pesquisa: procura


Dada uma rvore binria de pesquisa t e um valor x, pretende-se vericar 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 2 3

rvore vazia, pelo que a rvore t no contm x n corrente contm x 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

26 / 1

rvores Binrias de Pesquisa: procura (2)


Implementao:

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

27 / 1

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 lho (e.g. remover o 3) n interior com dois lhos (e.g. remover o 14)

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

28 / 1

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 2 3

localizar o n com o valor x, seja nx esse n; se nx um n-folha, simplesmente remove-se o n; se nx um n-interior, necessrio mais cuidado para no carmos com 2 rvores desconexas:
se nx s tiver um lho, a sub-rvore pendurada nesse n toma o lugar de nx se nx tiver dois lhos, ento devemos procurar o n com menor valor entre os descendentes do lho-direito (ou o maior dos descendentes do lho-esquerdo) para tomar o lugar de nx.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

29 / 1

rvores Binrias de Pesquisa: remover (3)

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

30 / 1

rvores Binrias de Pesquisa: remover (4)

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

31 / 1

rvores Binrias: inorder no recursivo


Podemos fazer visitas depth-rst (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

32 / 1

Pesquisa em largura-primeiro (breadth-rst)


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

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

33 / 1

rvores Binrias de Pesquisa: breadthFirst


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

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

34 / 1

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 lho-esquerdo e lho-direito esto trocadas em todos os ns. A gura ilustra 2 rvores, onde a 2a. o espelho da 1a.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

35 / 1

Exerccio com rvores: espelho (2)

Ver soluo completa na pgina dos apontamentos.

Fernando Silva (DCC-FCUP)

8. rvores

Estruturas de Dados

36 / 1

You might also like