Вы находитесь на странице: 1из 49

rvores

rvores
As listas encadeadas usualmente fornecem maior flexibilidade que as matrizes, mas so estruturas lineares e difcil us-las para organizar uma representao hierrquica de objetos. As pilhas e as filas apresentam hierarquia limitada a uma dimenso. Para superar essa limitao as rvores so estruturas prprias para a representao de hierarquia. As rvores consistem de ns e arcos. As rvores so representadas de cima para baixo com a raiz no topo e as folhas na base.

A raiz um n que no tem ancestrais tem somente filhos.


As folhas no tm descendentes.

rvores
Uma rvore T um conjunto finito e no-vazio de ns T= {r} T1 T2 . . . Tn, com as seguintes propriedades:
1. 2.

um n especial da rvore, r, chamado de raiz da rvore; e o restante dos ns particionado n 0 subconjuntos, T1 , T2 , , Tn , cada um dos quais sendo uma rvore.

A definio de uma rvore recursiva, uma rvore definida em termos dela mesmo.
No h o problema de recurso infinita porque toda rvore tem um nmero finito de ns e no caso base uma rvore tem n=0 subrvores. Uma rvore minimal composta de um nico n, a raiz.

rvores
D

B
A C

I Ta Tb

K Tc

Ta = {A}, Ta uma rvore minimal Tb = {B,{C}} Tc = {D,{E,{F}},{G,{H,{I}},{J,{K},{L}},{M}}}

rvores
O grau de um n o nmero de subrvores do n.

Um n de grau zero no possui subrvores.

Cada raiz ri da subrvore Ti chamada de filho de r.

A definio de uma rvore no impem qualquer condio sobre o nmero de filhos de um n. O nmero de filhos de um n pode variar de 0 a qualquer inteiro.

O n raiz o pai de todas as razes ri das subrvores Ti, 1 < i n.

rvores
Duas razes ri e rj das subrvores distintas Ti e Tj de Ti so ditas irms. Dada uma rvore T que contm um conjunto de ns, um caminho em T definido como uma seqncia no vazia de ns ou arcos P={r1, r2,, rk} para 1 i k tal que o i-simo n da seqncia, ri, o pai do (i+1)-simo n da seqncia ri+1. O nmero de arcos em um caminho chamado de comprimento do caminho P e definido por k-1.

rvores
D

Na rvore T h 29 caminhos diferentes incluindo os caminhos de comprimento 0; os caminhos de comprimento 1, e os caminhos de comprimento 3.

rvores
O nvel ou profundidade de um n ri R da rvore T o comprimento do nico caminho em T entre a raiz r e o n ri .

A raiz T est no nvel 0 e as razes das subrvores esto no nvel 1.

A altura de um n ri R numa rvore T o comprimento do caminho mais longo do n ri a uma folha.

Folhas tm altura igual a 0. A altura de uma rvore T a altura do n raiz ri.

A rvore vazia uma rvore legtima de altura 0 (por definio)

Numa rvore T o n ri um ancestral do n rj se existe um caminho em T de ri a rj .

Numa rvore T o n rj um descendente do n ri se existe um caminho em T de ri a rj .

rvores
Uma rvore pode ser representada como um conjunto de reunies aninhadas no plano (Diagrama de Venn).
D E F G H J M

rvores N-rias
Uma variao de rvores na qual todos os ns tm exatamente o mesmo grau.
No possvel construir uma rvore com um nmero finito de ns, todos com o mesmo grau N, exceto se N=0. Uma rvore N-ria T um conjunto finito de ns com as seguintes propriedades:
1. 2.

O conjunto vazio, T=; ou O conjunto consiste numa raiz, R, e exatamente N rvores N-rias distintas. Os ns remanescentes podem ser particionados em N 0 subconjuntos, T0, T1,, TN-1, cada um deles uma rvore N-ria tal que T={R, T0, T1,, TN-1 }.

Assim, os ns de uma rvore N-ria possuem grau 0 ou N.

rvores N-rias
A rvore vazia T= uma rvore, um objeto do mesmo tipo que a rvore no vazia.

Num projeto orientado a objetos, uma rvore vazia deve ser a instncia de alguma classe de objetos.
As rvores vazias so chamadas de ns externos por no possurem subrvores e por isso aparecem nas extremidades das rvores.

As rvores no vazias so chamadas de ns internos.

rvores ternrias
A
C B

D E

G
H I K

J
L

rvores N-rias
Os quadrados representam rvores vazias e os crculos denotam os ns no vazios. As rvores cujas subrvores esto ordenadas so rvores ordenadas. As rvores cuja ordenao no importante so chamadas de rvores orientadas.

rvores Binrias
Uma rvore binria uma rvore N-ria para a qual N=2. Uma rvore binria T um conjunto finito de ns com as seguintes propriedades:
1. 2.

O conjunto vazio, T=; ou O conjunto consiste em uma raiz, r, e em exatamente duas rvores binrias distintas TL e TR, T={r, TL , TR}.

A rvore TL dita a subrvore da esquerda e a rvore TR dita a subrvore da direita. Uma rvore binria com n 0 ns internos contm n+1 ns externos, pois uma rvore N-ria contm (N-1)n+1 ns externos.

Percurso em rvores
Grande parte dos algoritmos para a manipulao de rvores tm a caracterstica comum de visitar sistematicamente todos os ns das rvores. O processo de visitao dos ns da rvore chamado de percurso em rvore.

H duas formas para a realizao de um percurso:


percurso em profundidade e

percurso em largura.

Percurso em profundidade
Alguns percursos em profundidade possuem nomes especficos:
percurso em pr-ordem,
percurso em ps-ordem e percurso em ordem simtrica.
A B C E D H

Percurso em profundidade
Percurso em pr-ordem

A raiz primeiro n a ser visitado. O percurso definido recursivamente.


1. Visite o n raiz. 2. Percorra em pr-ordem cada uma das subrvores da raiz

na ordem definida.

Para uma rvore binria:


1. Visite o n raiz. 2. Percorra em pr-ordem a subrvore esquerda. 3. Percorra em pr-ordem a subrvore direita.

Ex: A, B, C, D, E, F, G, H, I

Percurso em profundidade
Percurso em ps-ordem

A B C F E G I D H

A raiz ltimo n a ser visitado.

O percurso definido recursivamente.


na ordem definida. 2. Visite o n raiz.

1. Percorra em ps-ordem cada uma das subrvores da raiz

Para uma rvore binria:


1. Percorra em ps-ordem a subrvore esquerda. 2. Percorra em ps-ordem a subrvore direita. 3. Visite o n raiz.

Ex: C, B, F, G, E, I, H, D, A

Percurso em profundidade
Percurso em Ordem Simtrica (in-ordem)

O n raiz visitado entre as visitas das subrvores esquerda e direita. O percurso s faz sentido em rvores binrias.
1. Percorra a subrvore esquerda. 2. Visite o n raiz. 3. Percorra a subrvore direita.
A B C E D H

Ex: B, C, A, F, E, G, D, I, H

Percurso em Largura ou Extenso


O percurso em extenso visita os ns na ordem dos nveis da rvore de cima para baixo ou de baixo para cima. Pode-se visitar os ns em cada nvel da esquerda para a direita ou da direita para esquerda. H 4 possibilidades.
A B C E D H

nvel 0

nvel 1
nvel 2 nvel 3

Ex: A, B, D, C, E, H, F, G, I

Exerccios
A B D E I M a) b) c) d) e) f) N F J C G K H L

Quais ns so folhas. Qual o n raiz. Que n pai de C. Quais so os filhos de C. Quais so os antecessores de E. Quais os sucessores de E. Qual a profundidade de C. Qual a altura de C. Quantos caminhos diferentes existem. Quais so eles. Liste os ns em Preorder, Inorder, Postorder.

Implementao de rvores binrias


As rvores binrias podem ser implementadas como matrizes e como estruturas encadeadas. Para implementar uma rvore como uma lista encadeada um n declarado como uma estrutura com um campo de informao e dois campos de ponteiros. Os campos de ponteiros contm os ndices das clulas da matriz em que os filhos esquerda e direita so armazenados se houver algum.
ndice Info Esq. Dir. 0 13 4 2 1 31 6 -1 2 25 7 1 3 12 -1 -1 4 10 5 3 5 2 -1 -1 6 29 -1 -1 7 20 -1 -1

13 10 2 12 20 29 25 31

Implementao de rvores binrias


A implementao de rvores baseadas em matrizes pode ser incoveniente em funo da alocao esttica.

Essa caracterstica importante pois pode ser difcil prever quantos ns devem ser criados.
Normalmente uma estrutura de dados dinmica o modo mais eficiente de representar uma rvore. Numa estrutura de dados dinmica um n instncia de uma classe composta por um membro de informao e dois ponteiros que apontem para as subrvores direita e esquerda.

rvores de Busca
So rvores que suportam operaes eficientes de busca, insero e remoo. A rvore armazena um nmero finito de chaves a partir de um conjunto de chaves K totalmente ordenado.

Cada n na rvore contm pelo menos uma chave e todas as chaves so diferentes.
Numa rvore de busca h um critrio de ordenao de dados.

Buscas em rvores de Busca


A vantagem principal de uma rvore de busca que o critrio de ordenao dos dados assegura que no necessrio fazer um percurso completo numa rvore para encontrar um valor.

rvores M-Mltiplas de Busca


Uma rvore M-mltipla de busca T um conjunto finito de chaves onde ou T vazio ou T consiste de n rvores M-mltiplas de busca T0, T1,... ,Tn-1, e n-1 chaves k1, k2,... ,kn-1, T={T0, k1, T1, k2, T2, ... , kn-1, Tn-1} onde 2 n M, tal que as chaves e os ns satisfazem as seguintes propriedades de ordenao:
1.

As chaves em cada n so distintas e ordenadas: ki < ki+1 para 1 i n1. Todas as chaves das subrvores Ti-1 so menores do que ki . A rvore Ti-1 dita a subrvore da esquerda em relao a ki . Todas as chaves das subrvores Ti+1 so maiores do que ki . A rvore Ti+1

2.

3.

rvores M-Mltiplas de Busca


1,3,4

M=4

5,7

rvore vazia

Cada n no vazio tem entre 1 e 3 chaves e no mximo 4 subrvores.

As chaves de cada n esto ordenadas.

rvores Binrias de Busca


Uma rvore binria de busca T um conjunto finito de chaves onde ou T vazio ou T consiste em uma raiz e em exatamente 2 rvores binrias de busca TL e TR , T={r, TL, TR}

tal que as seguintes propriedades so satisfeitas:


1.

Todas as chaves da subrvore TL so menores do que r . A rvore TL dita a subrvore da esquerda em relao a r . Todas as chaves da subrvore TR so maiores do que r . A rvore TR dita a subrvore da direita em relao a r .

2.

rvores Binrias de Busca


C

Busca numa rvore de Busca


A vantagem principal de uma rvore de busca o critrio de ordenao dos dados.

No necessrio fazer um percurso completo numa rvore para encontrar um valor.


Busca em uma rvore M-mltipla de busca

Na busca de um valor x primeiramente examina-se as chaves do n raiz.


Se x no estiver no n raiz h 3 possibilidades:
x menor que k1 , neste caso a busca deve prosseguir na subrvore T0 ; x maior que kn-1 , neste caso a busca deve prosseguir na subrvore Tn-1 ; Ou existe um i tal que 1 i < n-1 para o qual ki < x < ki+1, caso em que a busca deve prosseguir na rvore Ti .

Busca numa rvore de Busca


Para uma rvore M-mltipla de busca quando x no encontrado em um certo n, a busca continua apenas em uma das subrvores daquele n. Uma busca com sucesso comea na raiz e percorre o caminho at o n no qual a chave se encontra. Quando o objeto de busca no est na rvore, o mtodo de busca descrito traa um caminho da raiz at uma subrvore vazia.

Percurso em uma rvore binria de busca


Algoritmo para localizar um elemento em uma rvore binria.

Para cada n compare a chave a ser localizada com o valor armazenado no n correspondente. Se a chave for menor v para a subrvore esquerda.

Se a chave for maior v para a subrvore direita.


A busca para quando a chave igual ao n.

O algoritmo tambm dever parar se o valor no for encontrado.

Percurso em uma rvore binria de busca


Para localizar o valor 31 apenas 3 testes so realizados. O pior caso quando se busca o valor 29.

13 10
2 12 20 29 25 31

Insero de um n em uma rvore binria


Insero de um novo n (n_node)
Faz-se c_node = raiz Enquanto c_node <> nulo

{
Se n_node < c_node c_node = filho esquerdo de c_node

Se n_node > c_node


c_node = filho direito de c_node } Anexar n_node filho esquerdo de n_node = nulo filho direito de n_node= nulo

Insero de um n em uma rvore binria


15 4 15 4 15

20

15 4 17 20 4

15 20 17 19

Insero de um n em uma rvore binria


A insero deve evitar o ocorrncia do mesmo elemento mais de uma vez na rvore.

Se a insero de um mesmo elemento for necessria deve-se indicar a deciso a ser tomada em funo da aplicao.

Remoo de um n em uma rvore binria


A remoo de um n outra operao necessria para se manter uma rvore binria de busca. O nvel de complexidade depende da posio do n a ser removido da rvore. Existem 3 casos de remoo de um n da rvore binria de busca:

O n uma folha e no tem filhos.


O ponteiro de seu ascendente ajustado para nulo e o n removido.

O n tem um filho.
O ponteiro de seu ascendente ajustado para apontar para o filho do n e o n removido.

O n tem dois filhos.


Nenhuma operao de uma etapa pode ser realizada pois os ponteiros esquerdo e direito do ascendente no podem apontar para ambos os filhos do n a ser removido.

Remoo de um n em uma rvore binria

O n uma folha e no tem filhos.

13 10 2 25 10 2

13 25

20

Remoo de um n em uma rvore binria

O n tem um filho.

13 10 2 20 25 2 10

13

20

Remoo de um n em uma rvore binria


Se o n tem 2 filhos a remoo pode ser feita de duas formas: por fuso ou por cpia. Remoo por fuso

Uma rvore extrada de duas subrvores do n e esta rvore anexada ao ascendente do n. Os valores da subrvore direita so maiores do que os valores da subrvore esquerda. Na subrvore da esquerda o n com o maior valor deve tornar-se ascendente da subrvore direita. O n com o maior valor na subrvore da esquerda o n mais direita desta subrvore. Este n pode ser encontrado movendo-se ao longo da subrvore e tomandose sempre os ponteiros direitos at encontrar-se o valor nulo. Simetricamente na subrvore da direita o n com o menor valor deve tornar-se um ascendente da subrvore esquerda.

Remoo de um n em uma rvore binria por fuso


Algoritmo
Se o n no tem filhos direita Anexe seu filho da esquerda seu ascendente Seno Se o n no tem filhos esquerda Anexe seu filho da direita seu ascendente Seno { Mova-se para a esquerda Mova-se para a direita at encontrar o valor nulo O n encontrado ser ascendente da subrvore direita } Remova o n

Remoo de um n em uma rvore binria por fuso


N a ser removido 13 10 2 11 18 20 24 25 26 2

13 10
11 20 24

18

26

N procurado

Remoo de um n em uma rvore binria por fuso


Implementao
if (node !=0) { if (node->right==0) node=node->left; else if (node->left==0) node=node->right; else { tmp=node->left; while (tmp->right != 0) tmp=tmp->right; tmp->right = node->right; tmp=node; node = node->left; } delete tmp; }

1 2 3 4 5 6

Remoo de um n em uma rvore binria por fuso


Detalhes de implementao
node tmp tmp 1 tmp node node 2 tmp node node

node

tmp
3

Remoo de um n em uma rvore binria por cpia


A remoo por cpia remove uma chave k1 sobreescrevendo-a por uma outra chave k2 e ento removendo o n que contm k2. e ento removendo o n que contm Se o n tem 2 filhos ele pode ser reduzido a um dos dois casos simples: ou o n uma folha ou o n tem somente um filho no-vazio.

Pode-se substituir a chave que est sendo removida pelo seu predecessor (ou sucessor) imediato. O predecessor de chave a chave do n mais direita na subrvore da esquerda. Analogamente, seu sucessor imediato a chave do n mais esquerda na subrvore da direita. Localiza-se o predecessor a partir da raiz da subrvore esquerda e movendose para direita o tanto quanto possvel at encontrar o valor nulo. Substitui-se a chave do predecessor pelo n a ser removido. Dessa forma o n se transforma em uma folha ou antecessor de apenas um filho no vazio.

Remoo de um n em uma rvore binria por cpia


N a ser removido 13 10 2 11 18 20 24 25 26 2 10 11 18 20 13

24
26

N procurado

Remoo de um n em uma rvore binria por cpia


Implementao
else if (node->left==0) node=node->right; else { tmp=node->left; prev = node; while (tmp->right != 0){ 1 if (node->right==0) node=node->left;

prev=tmp;
tmp=tmp->right; } node->key = tmp->key; if (prev->node==0) prev->left = tmp->left; else prev->right = tmp->left; } delete tmp;

3 4 5

Exerccios
Sobre rvores binrias de pesquisa:
a) b)

Qual a principal propriedade deste tipo de rvore? Desenhe a rvore binria de pesquisa que resulta da insero sucessiva das chaves QUESTAOFCIL em uma rvore inicialmente vazia. Represente a rvore sob a forma de matriz.(slide 22) Desenhe as rvores resultantes das retiradas dos elementos E e depois U da rvore do item anterior por fuso. Desenhe as rvores resultantes das retiradas dos elementos E e depois U da rvore do item anterior por cpia.

c) d) e)

Exerccios para apresentar em sala


Elaborar um programa que apresente o seguinte menu:

Insero em rvore binria Remoo em rvore binria Apresentao da rvore


A rvore deve ser apresentada da seguinte forma: (impresso por nvel) Raiz: 25 FD: 20 FE: 30 N 20: FD: 10 FE: 23 N 30: FD: 28 FE: 40 N 10: FD: 5 FE: 15 N 23: FD: -1 FE: -1 N 28: FD: -1 FE: -1 N 40: FD: -1 FE: -1 N 5: FD: -1 FE: -1 N 15: FD: -1 FE: -1

Вам также может понравиться