Você está na página 1de 20

Arvores

Maur cio L. Pilla

Estruturas de Dados I

2008 - draft 2008.11.13 - favor informar eventuais erros

O que so rvores? a a
Arvores ou trees na Computao denem estruturas de ca dados Denio pode ser feita recursivamente ca Uma rvore um conjunto de nodos (que pode ser vazio) a e Se houver nodos, um considerado o raiz e Os demais nodos esto organizados como sub-rvores do a a nodo raiz Cada sub-rvore no-vazia possui um nodo raiz a a
O qual dito ser lho da raiz da rvore denida no n e a vel anterior

O que so rvores? a a

Figura: Exemplo de rvore a com estrutura de um livro

O nodo raiz Livro e O nodo raiz da sub-rvore mais a ` esquerda Cap1 a e Um nodo pode ter zero ou mais lhos (nodos que so ra de a zes suas sub-rvores) a Arestas conectam os nodos A altura de uma sub-rvore pode a ser diferente das alturas das outras sub-rvores da mesma a raiz E poss encontrar facilmente vel uma Seo do livro percorrendo ca a rvore a partir da raiz Livro a A busca na rvore proporcional a e ` altura da rvore a a

Glossrio de rvores a a

Figura: Exemplo de rvore a com estrutura de um livro

Relao de parentesco ca Cada raiz pai dos nodos ra e zes de suas sub-rvores a Cada nodo conectado a um pai um lho e Dois nodos possuem um caminho entre si quando e poss percorrer um conjunto vel de arestas que conectam nodos intermedirios e os dois nodos a Um nodo N ancestral de e outro nodo M se h um caminho a descendente de N at M e Um nodo N descendente de e M se h um caminho ascendente a de N at M e

Glossrio de rvores a a
Grau de um nodo o nmero e u de lhos Grau de uma rvore o maior a e grau encontrado na rvore a Nodo interno um nodo com e grau maior que zero Folha um nodo que no e a possui lhos (grau zero) N de um nodo o nmero vel e u de nodos entre o prprio e a raiz o (raiz inclusa) Altura da rvore o maior a e n dentre seus nodos vel

Figura: Exemplo de rvore a com estrutura de um livro

Corolrios para Arvores No-Vazias a a

Em uma rvore no-vazia, h um caminho descendente a a a da raiz para todos os nodos


Ou seja, a raiz o ancestral de todos os nodos (menos e raiz)

Em uma rvore no-vazia, h um caminho ascendente de a a a todos os nodos para a raiz


Ou seja, todos nodos so descendentes prprios da raiz a o (menos a raiz)

Qualquer nodo possui pai, exceto a raiz

Arvores Binrias de Pesquisa a


Arvores com a restrio de grau ca
Maior grau 2

Facilitam a implementao ca Cada nodo pode ter no mximo dois lhos a Para qualquer nodo
Chaves na subrvore esquerda so menores a a Chaves na subrvore direita so maiores a a

Figura: Duas rvores binrias, apenas a da esquerda uma rvore a a e a binria de pesquisa[4] a

Arvores Binrias de Pesquisa a

Exemplo de nodo, implementao encadeada ca


s t r u c t nodo { / i n f o r m a c a o q u a l q u e r / s t r u c t nodo l e f t , r i g h t ; };

Encontrando Nodo[4]

s t r u c t nodo f i n d ( e l e m e n t t y p e x , s t r u c t nodo i f ( T == NULL ) r e t u r n NULL ; i f ( x < T>e l e m e n t ) / p r o c u r a ` e s q u e r d a / a r e t u r n ( f i n d ( x , T> l e f t ) ) ; else i f ( x > T>e l e m e n t ) / p r o c u r a ` d i r e i t a r e t u r n ( f i n d ( x , T>r i g h t ) ) ; else return T; }

Inserindo Nodo[4]
s t r u c t nodo i n s e r t ( e l e m e n t t y p e x , s t r u c t nodo T ){ i f ( T == NULL ){ / A r v o r e e r a v a z i a / T = ( s t r u c t nodo ) m a l l o c ( s i z e o f ( s t r u c t nodo ) ) ; i f ( T == NULL ) e r r o r ( Problema na a l o c a o ! ) ; ca else { T>e l e m e n t = x ; T> l e f t = T>r i g h t = NULL ; } } else { i f ( x < T>e l e m e n t ) T> l e f t = i n s e r t ( x , T> l e f t ) ; else i f ( x > T>e l e m e n t ) T>r i g h t = i n s e r t ( x , T>r i g h t ) ; / s e x j na r v o r e , f a z nada / a a return T; }

Remoo de Nodos[4] ca
s t r u c t nodo d e l e t e ( e l e m e n t t y p e x , s t r u c t nodo T ){ s t r u c t nodo t m p c e l l , c h i l d ; i f ( T == NULL ) e r r o r ( E lem ento nao e n c o n t r a d o ) ; else i f ( x < T>e l e m e n t ) / E s q u e r d a / T> l e f t = d e l e t e ( x , T> l e f t ) ; else i f ( x > T>e l e m e n t ) / D i r e i t a / T>r i g h t = d e l e t e ( x , T>r i g h t ) ; e l s e / E n c o n t r o u e l e m e n t o / i f ( T> l e f t && T>r i g h t ){ / c a s o d o i s f i l h o s / / e s c o l h e menor da s u b a r v o r e d i r e i t a / t m p c e l l = f i n d m i n ( T>r i g h t ) ; T>e l e m e n t = t m p c e l l >e l e m e n t ; T>r i g h t = d e l e t e ( T>e l e m e n t , T>r i g h t ) ; } e l s e { / f i l h o u n i c o / t m p c e l l = T; i f ( T> l e f t == NULL ) / S f i l h o ` d i r e i t a / o a c h i l d = T>r i g h t ; i f ( T>r i g h t == NULL ) / S ` d i r e i t a / o a c h i l d = T> l e f t ; free ( tmp cell ); return c h i l d ; } return T; }

Arvores AVL
Adelson-Velskii e Landis Motivao ca
Custo de buscar informao e fazer operaes em rvores ca co a depende da profundidade que o nodo desejado est a Uma rvore binria pode degenerar para uma lista a a encadeada

Em qualquer nodo, as subrvores esquerda e direita a podem ter altura diferindo de apenas 1 n vel Caso uma insero ou remoo altere esse equil ca ca brio, rotaes so aplicadas co a

Rotaes co
Rotaoes so classicadas em c a
Rotao ca Rotao ca Rotao ca Rotao ca Esquerda Direita Dupla Esquerda Dupla Direita

A partir do ponto de insero/remoo, percorre a rvore ca ca a ascendendo At chegar ` raiz e/ou encontrar um desbalanceamento e a Quando detectado um desbalanceamento,
Corrige com uma rotao ca

No primeiro desbalanceamento corrigido, pode parar

Rotao Simples ca
Na Rotao Simples, o piv (k2) o nodo onde ocorreu ca o e desbalano c Se altura da subrvore esquerda maior a
k1 o lho ` esquerda de k2 e a Faz-se rotao direita ca

Caso contrrio, a
k1 o lho ` direita de k2 e a Faz-se rotao esquerda ca

Figura: Rotao Simples [4] ca

Rotao Simples ca

Figura: Exemplo de Rotao Simples ` Direita, aps insero de 6 ca a o ca 1/2 [4]

Casos em que Rotao Simples no Resolve ca a

Figura: (a) Arvore desbalanceada por insero do 14 (b) Rotao ca ca simples no resolveu[4] a

Neste caso, o problema que a insero desbalanceou a e ca altura de uma subrvore interna a Soluo a Rotao Dupla ca e ca

Rotao Dupla ca
Na Rotao Dupla, quatro subrvores so envolvidas ca a a Note que as propriedade das chaves de uma rvore binria a a de pesquisa so sempre preservadas a

Figura: Rotao Dupla [4] ca

Rotao Dupla ca

Figura: Exemplo de Rotao Dupla Esquerda [4] ca

Como Decidir o Tipo de Rotao ca


hl(p) altura da subrvore esquerda (height left) e a hr (p) altura da subrvore direita (height right) e a Seja p o n mais prximo das folhas de T que se tornou o o desbalanceado (|hl(p) hr (p)| = 2)

Caso hl(p) > hr (p)


Sendo u o lho ` esquerda de p a
Se hl(u) > hr (u), realize rotao direita ca Se hr (u) > hl(u), realize rotao dupla direita ca

Caso hr (p) > hl(p)


Sendo u o lho ` direita de p a
Se hr (u) > hl(u), realize rotao esquerda ca Se hl(u) > hr (u), realize rotao dupla esquerda ca

Referncias e
James F. Korsh, Leonard J. Garrett Data Structures, Algorithms and Program Style Using C Pws Pub Co, 1998 Alfred V. Aho, John E. Hopcroft, Jerey D. Ullman Data Structures and Algorithms Addison Wesley, 1983 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest Introduction to Algorithms The MIT Press, 2nd edition, 2001 Boa introduo ` complexidade de algoritmos ca a Mark Allen Weiss Data Structures and Algorithm Analysis in C Addison-Wesley Longman, 2nd edition, 1996

Você também pode gostar