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

O que so rvores?

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

Estruturas de Dados I verso 2010.11.16 a

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: Arvore: raiz e suas sub-rvores 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

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)

Figura: Exemplo de rvore a com estrutura de um livro

Qualquer nodo possui pai, exceto a raiz

Arvores Binrias de Pesquisa a


Arvores com a restrio de grau ca
Maior grau 2

Arvores Binrias de Pesquisa a

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

Exemplo de nodo, implementao encadeada ca


tipo nodo: registro; in cio elemento: inteiro /* Contedo do nodo */; u esquerda, direita: nodo;

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;

Arvores Binrias Implementadas com Vetores a


Arvores binrias podem ser implementadas com vetores a Especialmente util em linguagens que no permitem a alocao dinmica de memria ca a o
FORTRAN

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Filhos de um nodo da posio i do vetor so encontrados ca a em


2i + 1, para o lho esquerdo 2i + 2, para o lho direito

Espao proporcional a 2h n para uma rvore de altura h c a e n nodos Sem desperd se rvore completa cio a

Mtodos para Percorrer Arvores em Profundidade e (Depth-First)


Cada mtodo deve ser aplicado recursivamente nas e subrvores a Muda quando a raiz visitada e

Mtodo para Percorrer Arvores em Amplitude e (Breadth-First)


Percorre a rvore por n a veis Algoritmo 4: amplitude(T)
Entrada: Ponteiro para raiz T da subrvore a percorrer a Resultado: Percorre a rvore em amplitude, aplicando as operaes denidas em a co visita() varivel tmp: la; a varivel atual: nodo; a in cio tmp nova la(); se T no nulo ento a e a enqueue(T, la); enquanto no empty(tmp) faa a c atual dequeue(T); se atual.esquerda no nulo ento a e a enqueue(atual.esquerda, la); se atual.direita no nulo ento a e a enqueue(atual.direita, la);

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

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

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]

Figura: Rotao Simples [4] ca

Casos em que Rotao Simples no Resolve ca a

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

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

Figura: Exemplo de Rotao Dupla Esquerda [4] 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

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.

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