Академический Документы
Профессиональный Документы
Культура Документы
a a
Arvores
Maur cio L. Pilla
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
1 2 3 4 5
Figura: Duas rvores binrias, apenas a da esquerda uma rvore a a e a binria de pesquisa[4] a
Encontrando Nodo[4]
Algoritmo 1: nd(x, T)
Entrada: Contedo a procurar x, ponteiro para nodo T u Sa da: Ponteiro para nodo encontrado ou nulo, se no encontrado a Resultado: Encontra elemento com contedo x ou retorna nulo u in cio se T nulo ento e a retorna nulo seno a se T.elemento = x ento a retorna T seno a se T.elemento > x ento a retorna nd(x, T.esquerda) seno a retorna nd(x, T.direita)
Inserindo Nodo[4]
Algoritmo 2: insert(x, T)
Entrada: Contedo a inserir x, ponteiro para raiz T u Sa da: Ponteiro para raiz Resultado: Insere um elemento em uma rvore com raiz T ou cria nova rvore com a a um nodo varivel temp: nodo; a in cio se T nulo ento e a /* subrvore vazia */ a temp novo nodo; temp.elemento x; retorna temp seno a se T.conteudo > x ento a retorna insert(x, T.esquerda) seno a se T.conteudo > x ento a retorna insert(x, T.direita) seno a /* ltimo caso, x j presente, n~o faz nada u a a retorna T
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14
*/
Remoo de Nodos[4] ca
Algoritmo 3: delete(x, T)
Entrada: Contedo a remover x, ponteiro para raiz T u Sa da: Ponteiro para raiz Resultado: Remove um elemento da rvore com raiz T , se existente a varivel tmp: nodo; a in cio se T nulo ento e a /* subrvore vazia */ a retorna nulo seno a se T.conteudo > x ento a T.esquerda delete(x, T.esquerda) seno a se T.conteudo > x ento a T.direita delete(x, T.direita) seno a se T.direita e T.esqueda no nulos ento a a /* dois filhos? */ tmp nd min(T.direita) /* Escolhe menor da subrvore direita a */ T.elemento tmp.elemento; T.direita delete(T.elemento,T.direita); seno a se T.esquerda nulo ento e a tmp T.direita; seno a tmp T.esquerda; libera(tmp); retorna tmp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Espao proporcional a 2h n para uma rvore de altura h c a e n nodos Sem desperd se rvore completa cio a
Pr-ordem e
Visita raiz, subrvore esquerda, subrvore direita. a a
1 2 3 4 5 6 7 8 9 10 11 12
Em-ordem
Visita subrvore esquerda, raiz, subrvore direita. a a
Ps-ordem o
Visita subrvore esquerda, subarvore direita, raiz. a
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
Rotaes co
Rotaoes so classicadas em c a
Rotao ca Rotao ca Rotao ca Rotao ca Esquerda Direita Dupla Esquerda Dupla Direita
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
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
Rotao Simples ca
Caso contrrio, a
k1 o lho ` direita de k2 e a Faz-se rotao esquerda ca Figura: Exemplo de Rotao Simples ` Direita, aps insero de 6 ca a o ca 1/2 [4]
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: (a) Arvore desbalanceada por insero do 14 (b) Rotao ca ca simples no resolveu[4] a Figura: Rotao Dupla [4] ca
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
Arvores Rubro-Negras
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 Wikipedia Tree traversal Dispon em vel http://en.wikipedia.org/wiki/Tree_traversal. Acesso em: 2010.