Você está na página 1de 64

RVORES

Prof. Yandre Maldonado - 1

Prof. Yandre Maldonado e Gomes da Costa

rvores
rvores so estruturas de dados que caracterizam uma relao entre os dados que a compem; A relao existente entre os dados (ns) de uma rvore, uma relao de hierarquia; Formalmente, uma rvore um conjunto finito T de um ou mais ns, tais que:
a. b.

Prof. Yandre Maldonado - 2

Existe um n denominado raiz da rvore; Os demais ns formam m0 conjuntos separados T1, T2, ..., Tm, onde cada um destes conjuntos uma rvore. As rvores Ti (1i m) recebem a denominao de subrvores.

rvores
Esquematicamente, uma rvore pode ser representada da seguinte forma:
A

B
Prof. Yandre Maldonado - 3

rvores
Terminologia: No exemplo anterior, os quadrados representam os ns da rvore, cuja raiz o n A; Pela definio de rvore, cada n da rvore raiz de uma subrvore. O nmero de subrvores de um n o grau deste n; O grau de uma rvore igual ao grau do n de maior grau pertencente mesma; Um n de grau zero chamado de folha ou n terminal; O nvel do n definido como sendo o igual ao nmero de ns que o separam da raiz; A altura de uma rvore definida como sendo o nvel mais alto da rvore; Um conjunto de zero ou mais rvores disjuntas chamado de floresta;

Prof. Yandre Maldonado - 4

rvores
Em relao a rvore descrita anteriormente, pode-se observar:
Nodo A B C D E F G H I J K
Prof. Yandre Maldonado - 5

Grau 3 1 2 1 0 0 0 3 0 0 0

Nvel 0 1 1 1 2 2 2 2 3 3 3

Observaes Raiz da rvore

N folha N folha N folha N folha N folha N folha

rvores
Quando a ordem das subrvores significativa, a rvore chamada de ordenada. Neste caso, h diferena entre as seguintes rvores:
A A

Prof. Yandre Maldonado - 6

Entretanto, quando a ordem das subrvores no relevante, diz-se que a rvore orientada, uma vez que apenas a orientao dos ns importante (neste caso as duas rvores mostradas acima so iguais);

rvores
A raiz de uma rvore chamada de pai das razes de suas subrvores. As razes das subrvores de um n so chamadas de irmos que, por sua vez, so filhos de seu n pai. Formas de Representao de rvores: rvore convencional (grafos)
Prof. Yandre Maldonado - 7

C A B

F E

ou

F D

rvores
Conjuntos Aninhados ou Diagramas de Venn: A B D
Prof. Yandre Maldonado - 8

C E F

Parnteses Aninhados: (A(B(D)(E))(C(F)))

rvores
Barramento ou Tabelas: A B D E C F Notao Decimal (DEWEY): 1.A, 1.1.B, 1.1.1.D, 1.1.2.E, 1.2.C, 1.2.1.F.
Prof. Yandre Maldonado - 9

rvores
Aplicaes de rvores:
Representaes genealgicas; Representao de objetos que possuem relao hierrquica.
Exemplo: uma universidade
Prof. Yandre Maldonado - 10

Universidade

C. Tec. D. Inf. AEDI Jos Maria TC ...

C. Exatas ...

C. Bio. ...

D. Eng. ...

rvores
Aplicaes:
ndices de arquivos; rvores genealgicas ou hereditrias; Organizao de empresa (organograma); Avaliao de expresses; rvores de deciso; Busca em tabelas; Algoritmos e Classificao

Prof. Yandre Maldonado - 11

rvores
Exerccio: dada a seguinte rvore, encontre:
A raiz da rvore; Todos os ns folha; O grau e o nvel de cada n; A altura da rvore; Todas as relaes entre ns (irmo, pai, filho); Descreva a rvore com todas as representaes estudadas; B A E C F K G L D H I J M N

Prof. Yandre Maldonado - 12

rvores Binrias
Conjunto finito de ns que, ou vazio, ou consiste de uma raiz ligando duas outras rvores binrias.

So rvores onde o grau de cada n menor ou igual a dois; As subrvores de cada n so chamadas subrvore esquerda e subrvore direita; Assim, se um n possuir apenas uma subrvore, ela deve ser estabelecida como direita ou esquerda; Uma rvore binria pode ser vazia, isto , no possuir nenhum n;

Prof. Yandre Maldonado - 13

rvores Binrias
Alocao:
Por adjacncia:
Ns representados seqencialmente na memria; Esta alocao no conveniente na maioria dos casos, pois dificulta a manipulao da estrutura;
A

Prof. Yandre Maldonado - 14

A2B1D1F0C1E1G0
| C E | | G |

B C D | | F |

rvores Binrias
Alocao:
Encadeada:
Mais adequada; Permite melhor manipulao dos dados com diversas ordens de acesso aos ns; Os ns so alocados dinamicamente;
A

typedef struct { int chave; //Outros Campos } Registro; struct Nodo { Registro Reg; Nodo* Dir; Nodo* Esq; };

Prof. Yandre Maldonado - 15

Item de dado n
| C E | | G |

B D | | F |

esq dir | = NULL

rvores Binrias
Caminhamento em rvores Binrias:
a forma de percorrer todos os ns da rvore, com o objetivo de consultar ou alterar suas informaes; Existem vrios mtodos de tal forma que cada n seja visitado apenas uma vez; Um completo percurso da rvore nos d um arranjo linear sobre os ns; So trs os principais caminhos utilizados para percorrer uma rvore binria: visitar os ns em ordem pr-fixada, ps-fixada, ou in-fixa (in-ordem).

Prof. Yandre Maldonado - 16

rvores Binrias
Formas de caminhar:
Pr-ordem: RED
Visitar a raiz; Percorrer a subrvore esquerda; Percorrer a subrvore direita;

In-ordem: ERD (percorre as chaves em ordem crescente)


Percorrer a subrvore esquerda; Visitar a raiz; Percorrer a subrvore direita;
Prof. Yandre Maldonado - 17

Ps-ordem: EDR (ou forma polonesa)


Percorrer a subrvore esquerda; Percorrer a subrvore direita; Visitar a raiz; Obs.: o termo visita indica alguma manipulao sobre o n.

rvores Binrias
Exemplo: dada a seguinte rvore, verifique a seqncia de nos percorridos segundo as trs formas de caminhar sobre rvores binrias.
1

3 5 | | 8 | | 6 | 9 | | 10 | 7 | 11 |

Prof. Yandre Maldonado - 18

4 |

Pr-ordem: 1, 2, 4, 5, 8, 3, 6, 9, 7, 10, 11 In-ordem: 4, 2, 8, 5, 1, 6, 9, 3, 10, 7, 11 Ps-ordem: 4, 8, 5, 2, 9, 6, 10, 11, 7, 3, 1 (polonesa)

rvore Binria
Algoritmos de travessia em rvores binrias
observe que os procedimentos so recursivos, devido natureza recursiva da estrutura (rvore).
void voidpre_ordem pre_ordem(Nodo* (Nodo*T) T) {{
Prof. Yandre Maldonado - 19

void voidin_ordem in_ordem(Nodo* (Nodo*T) T) {{ ifif(T!=NULL) (T!=NULL) {{ in_ordem in_ordem(T->Esq); (T->Esq); printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); in_ordem in_ordem(T->Dir); (T->Dir); }} }}

ifif(T!=NULL) (T!=NULL) {{ printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); pre_ordem pre_ordem(T->Esq); (T->Esq); pre_ordem pre_ordem(T->Dir); (T->Dir); }} }}

rvores Binrias
void voidpos_ordem pos_ordem(Nodo* (Nodo*T) T) {{ ifif(T!=NULL) (T!=NULL) {{ pos_ordem pos_ordem(T->Esq); (T->Esq); pos_ordem pos_ordem(T->Dir); (T->Dir); printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); }} }}
Prof. Yandre Maldonado - 20

rvores Binrias de Busca


rvore Binria de Busca ou rvore de Pesquisa:
Uma ABB para um subconjunto S uma rvore binria com rtulos no qual cada vrtice v est rotulado com elementos e(v) S |:

Prof. Yandre Maldonado - 21

1. Para cada vrtice na subrvore Esq de v e() < e(v); 2. Para cada vrtice na subrvore Dir de v e() > e(v); 3. Para cada elemento a S, existe exatamente um vrtice v | e(a)=v.

rvores Binrias de Busca


Em resumo, uma rvore binria de pesquisa uma rvore binria onde cada n interno possui um registro, tal que:
Prof. Yandre Maldonado - 22

todo registro alocado na sua subrvore esquerda menor do que o n pai; e todo registro alocado na subrvore direita maior do que o n pai.

rvores Binrias de Busca


Exemplo:

Prof. Yandre Maldonado - 23

2 | 1 | | 3 | 4 | | 6 | 7 |

8 10 | 9 | | 11 |

rvores Binrias de Busca


A estrutura de dados para esta rvore poderia ser dada por:
Prof. Yandre Maldonado - 24

typedef typedef struct struct { { int int chave; chave; //Outros //Outros Campos Campos } } Registro; Registro; struct struct Nodo Nodo { { Registro Registro Reg; Reg; Nodo* Nodo* Dir; Dir; Nodo* Nodo* Esq; Esq; }; };

rvores Binrias de Busca


Operaes bsicas para uma rvore binria de busca:
Inicializao, insero, remoo (e balanceamento);

Para isto, preciso utilizar os processos recursivos de busca da rvore;


Procurasse um elemento Y na raiz, se ele no for encontrado deve-se procur-lo na subrvore esquerda caso ele seja menor que a raiz, ou na subrvore direita se ele for maior que a raiz;

Prof. Yandre Maldonado - 25

Nas operaes de alterao, remoo e consulta a busca deve ter sucesso, nas operaes de insero a busca deve fracassar;

rvores Binrias de Busca


void voidinsere_elemento insere_elemento(Nodo* (Nodo*T, T,Registro RegistroX) X) {{ ifif(T==NULL) (T==NULL) {{ T=(Nodo*)malloc(sizeof(Nodo)); T=(Nodo*)malloc(sizeof(Nodo)); T->Reg=X; T->Reg=X; void T->Esq=NULL; voidinicializa_arvore inicializa_arvore(Nodo* (Nodo*T) T) T->Esq=NULL; T->Dir=NULL; {{ T->Dir=NULL; }} T=NULL; T=NULL; else else }} ifif(X.chave<T->Reg.chave) (X.chave<T->Reg.chave) insere_elemento insere_elemento(T->Esq, (T->Esq,X); X); else else ifif(X.chave>T->Reg.chave) (X.chave>T->Reg.chave) insere_elemento insere_elemento(T->Dir, (T->Dir,X); X); else else T->Reg=X; T->Reg=X;//Substitui //Substitui }}

Prof. Yandre Maldonado - 26

rvores Binrias de Busca


Remoo
Para se criar esta funo deve-se fazer uma anlise. Pois, se o elemento a ser removido tiver apenas um descendente, a remoo ser simples. Mas se o elemento a ser removido tiver dois descendentes, ele dever ser substitudo por aquele que estiver mais a direita em sua subrvore esquerda (maior dos menores); ou por aquele que estiver mais a esquerda em sua subrvore direita (menor dos maiores).

Prof. Yandre Maldonado - 27

rvores Binrias de Busca


Exemplo: na rvore da transparncia 23, se removssemos o n com chave 5, poderamos substitu-lo pelo n com chave 4 (como mostra a figura abaixo), ou pelo n com chave 6.

Prof. Yandre Maldonado - 28

2 | 1 | | 3 | | 6 | 7 |

8 10 | 9 | | 11 |

rvores Binrias de Busca


Neste algoritmo foi utilizado o sucessor a esquerda, ou seja, o maior dos menores.
Registro RegistroMaior Maior(Nodo* (Nodo*Q) Q) {{ while while(Q->Dir (Q->Dir!= !=NULL) NULL) Q=Q->Dir; Q=Q->Dir; return(Q->Reg); return(Q->Reg); }... }...

void Remove_elemento (Nodo* T, Registro X) void Remove_elemento (Nodo* T, Registro X) {{ Nodo* A; Nodo* A; ifif (T==NULL) (T==NULL) printf ("Elemento nao encontrado na arvore."); printf ("Elemento nao encontrado na arvore."); else else ifif (X.chave<T->Reg.chave) (X.chave<T->Reg.chave) Remove_elemento (T->Esq, X); Remove_elemento (T->Esq, X); else else ifif (X.chave>T->Reg.chave) (X.chave>T->Reg.chave) Remove_elemento (T->Dir, X); Remove_elemento (T->Dir, X); else else if (T->Dir==NULL) if (T->Dir==NULL) {{ A=T; A=T; T=T->Esq; T=T->Esq; free(A); free(A); }} else else ifif (T->Esq==NULL) (T->Esq==NULL) {{ A=T; A=T; T=T->Dir; T=T->Dir; free(A); free(A); } } else else {{ T->Reg=Maior(T->Esq); T->Reg=Maior(T->Esq); Remove_elemento (T->Esq,T->Reg); Remove_elemento (T->Esq,T->Reg); }} }}

Prof. Yandre Maldonado - 29

rvores Binrias de Busca


Ordem de complexidade da rvore binria:
220 120 100 150 | 130 | | 200 | 260 | 250 | | 270 | | 350 | 300 400 | 500 |

Prof. Yandre Maldonado - 30

80 |

| 110 |

4 consultas 15 chaves 3 consultas 7 chaves 2 consultas 3 chaves 1 consulta 1 chave

Capacidade = 2N-1
Sendo N o nmero de nveis da rvore

A rvore Binria tem complexidade igual a pesquisa binria: -Melhor caso: 1 consulta; -Mdia: log2n; -Pior caso: log2n+1. Onde n o nmero de elementos armazenados na rvore.

rvores Binrias de Busca


Balanceamento:
Busca uma distribuio equilibrada dos ns; Busca otimizar a consulta; Busca minimizar o nmero mdio de comparaes necessrio para a localizao de uma chave.

Prof. Yandre Maldonado - 31

rvores Binrias de Busca


Balanceamento por altura:
Busca-se minimizar a altura da rvore;

rvore Completamente Balanceada:


Uma rvore completamente balanceada quando a distncia mdia dos ns at a raiz for mnima; Uma rvore binria dita completamente balanceada se, para cada n, o nmero de ns de suas subrvores diferem de no mximo, 1; rvore completamente balanceada a rvore com menor altura para o seu nmero de ns.
Prof. Yandre Maldonado - 32

rvore AVL
rvores no completamente balanceadas:
Uma rvore balanceada uma rvore onde a diferena de altura de qualquer subrvore no mximo 1; O grande esforo exigido para a manuteno de uma rvore completamente balanceada pode no ser compensado pelo ganho de eficincia no processo de busca; rvore no completamente balanceadas beneficiam o processo de busca, exigindo manuteno do balanceamento pouco onerosa.

Prof. Yandre Maldonado - 33

rvore AVL
Exemplo de rvore no completamente balanceada:
220 120 100 | 80 | | 110 | | 130 150 | 200 | | 140 | 260 | 250 | | 270 | | 350 | 300 400 |

Prof. Yandre Maldonado - 34

Neste contexto, destacam-se as rvores AVL, concebidas em 1962, por Adelson-Velskii e Landis, caracterizadas pela seguinte propriedade: para todo n de uma rvore AVL, a diferena entre as alturas de suas subrvores no excede a uma unidade.

rvore AVL
130 100 | 80 | | 120 | 150 | 200 | | 80 | 100 | 110 | 120 130 | 200 | | 150 |

| 110 |

rvore AVL

rvore no AVL

Prof. Yandre Maldonado - 35

As constantes inseres e remoes de ns de uma rvore podem provocar o desbalanceamento da mesma. Para corrigir este problema em uma rvore AVL, necessria a aplicao de uma das quatro rotaes que sero vistas a seguir.

rvore AVL
Rotao Direita:
p
Prof. Yandre Maldonado - 36

- u<b<p - u passa a ser a raiz -b pendurada esquerda de p - h0 u p h b h c h

Rotao Direita

u h + h 2 + 1 c a h b h h a

rvore AVL
Exemplo de Rotao Direita:
120 120

Rotao Direita
110

Prof. Yandre Maldonado - 37

150

100

150

100

130

200

80

110

130

200

80

rvore AVL
Rotao Esquerda:
p
Prof. Yandre Maldonado - 38

- p<b<z - z passa a ser a raiz -b pendurada direita de p - h0 z p

Rotao Esquerda

z h a h b h c h + h 2 + 1

h h a h b

rvore AVL
Exemplo de Rotao Esquerda:
120 120

Rotao Esquerda
100
130 100

Prof. Yandre Maldonado - 39

150

80

110

150

80

110

130

200

200

rvore AVL
Rotao Dupla Direita:
p u d h + h a 2 b v a h c ou h h
Prof. Yandre Maldonado - 40

- b<v<c - u<v<p - v passa a ser a raiz -h0 v

Rotao Dupla Direita

b ou

rvore AVL
Exemplo de Rotao Dupla Direita:

120
Prof. Yandre Maldonado - 41

Rotao Dupla Direita


150
100

120

110

150

80

130

200

80

110

130

200

100

rvore AVL
Rotao Dupla Esquerda:
p z h a y h d h + 2 c
Prof. Yandre Maldonado - 42

- b<y<c - p<y<z - y passa a ser a raiz -h0 y

Rotao Dupla Esquerda

b ou

b h ou

rvore AVL
Exemplo de Rotao Dupla Esquerda:

120
Prof. Yandre Maldonado - 43

Rotao Dupla Esquerda


130
100

120

100

150

80

110

200

80

110

130

200

150

rvore AVL
Identificao do caso a ser aplicado:
Supondo que o n q foi includo na rvore T, se houver desbalanceamento da rvore, sendo p o n raz do desbalanceamento mais prximo das folhas de T:
|he(p) hd(p)| = 2 he: altura da subrvore esquerda hd: altura da subrvore direita Caso 1: he(p)>hd(p)
Sendo u o filho esquerda de p: 1.1. he(u)>hd(u) rotao direita 1.2. hd(u)>he(u) rotao dupla direita
Prof. Yandre Maldonado - 44

Caso 2: hd(p)>he(p)
Sendo z o filho direita de p: 2.1. hd(z)>he(z) rotao esquerda 2.2. he(z)>hd(z) rotao dupla esquerda

rvore AVL
Exemplo de crescimento de uma rvore AVL (com balanceamento):
Suponhamos a insero das chaves na seguinte seqncia: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
50 50 50
Pilha 50 30

Prof. Yandre Maldonado - 45

30

50 Pilha

30

Pilha

20

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
50
30
Prof. Yandre Maldonado - 46

30

50 Pilha

50 Pilha

20

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 47

30
20 30

20

50

20

50

Pilha

15

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 48

20

15

50

20 30

20 30 Pilha

15

Pilha

10

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30 30
Prof. Yandre Maldonado - 49

15 15 50 10 10 20 12 20

50

10 15 30 Pilha

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 50

15

10

50

15 30

15 30 Pilha 30 Pilha

10

20

Pilha

12

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 51

15

15

50

10

30

10

20

12

20

50

12

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 52

20

10

30

30 15

30 15 Pilha 15 Pilha

12

20

50

Pilha

18

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
18
Prof. Yandre Maldonado - 53

10

30

20 30 15

20 30 15 Pilha

12 18 17

20

50

Pilha

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 54

15

10

30

10

30

12 18 17

20

50

12

18

50

17

20

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
20
Prof. Yandre Maldonado - 55

10

30

18 30

18 30 15 Pilha 30 15 Pilha

12 17

15

18 20

50

Pilha

25

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 56

15

10

30

10

20

12 17

18 20

50

12

18

30

17 25

25

50

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
25

15

10

20

30 20

30 20 15 Pilha 20 15 Pilha 15 Pilha

Prof. Yandre Maldonado - 57

12

18

30

15 Pilha

17

25

50

24

rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
20

15

10

20

15

30

Prof. Yandre Maldonado - 58

12

18

30

10

18

25

50

17

25

50

12

17

24

24

rvore AVL
Exerccio:
Dada a seguinte seqncia de chaves numricas a serem inseridas em uma rvores AVL, mostre a seqncia de rvores AVL produzidas aps a insero de cada uma destas chaves:
50, 40, 45, 70, 80, 60, 90, 85, 82, 55, 75.

Prof. Yandre Maldonado - 59

rvore AVL
Exerccio
Dada a seguinte rvores AVL, mostre a seqncia de rvores produzidas aps a remoo de cada chave da seguinte seqncia:
50, 60, 55.

Prof. Yandre Maldonado - 60

rvore AVL

Excluso do 50:

Prof. Yandre Maldonado - 61

rvore AVL

Excluso do 60:

Prof. Yandre Maldonado - 62

rvore AVL

Excluso do 55:

Prof. Yandre Maldonado - 63

Bibliografia
Azeredo, Paulo. Notas de aula de Algoritmos e Estruturas de Dados. INF/UFRGS, 2000; Celes, Waldemar et al. Introduo a Estruturas de Dados. Editora Campus, 2004; Wirth, Niklaus. Algoritmos e Estruturas de Dados. Editora PHB; Ziviani, Nivio. Projeto de Algoritmos. Editora Pioneira.

Prof. Yandre Maldonado - 64

Você também pode gostar