Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de Dados I
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
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
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
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
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
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
Rotao Simples ca
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
Rotao Dupla 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