Anda di halaman 1dari 20

RVORES

Definio Uma rvore T (tree) um conjunto finito de N estruturas elementares, chamados nodos (ns), tal que se N > 0, ento: 1. Existe um nodo especial, chamado raiz da rvore; 2. Os restantes N1 nodos esto particionados em M conjuntos disjuntos: S1, S2, ......, SM, onde cada um destes conjuntos tambm uma rvore. As rvores S1, S2, ......, SM so chamadas sub-rvores de T. rvores so estruturas de dados no sequnciais extremamente teis em muitas aplicaes. rvores so estruturas de dados que caracterizam uma relao entre os dados que a compem. A relao existente entre os nodos uma relao de hierarquia, onde um conjunto de nodos hierarquicamente subordinado a outro.

Formas de Representao Grfica


Grafo (representao mais utilizada)

Diagrama de Venn (ou digrama de incluso)

Identao A B

D E F G

Parnteses Aninhados (A (B(D, E, F), C(G)))

Terminologia
A raiz de uma rvore chamada de pai de suas subrvores. Nodos com o mesmo pai so denominados irmos. O grau de um nodo por definio o nmero de subrvores do nodo. O grau da rvore grau mximo entre todos os nodos. Um nodo folha (terminal ou externo) tem grau zero, ou seja, no tem sub-rvores. O nodo raiz tem nvel 0, os nodos filhos da raiz tm nvel 1 e, assim, sucessivamente. A altura de uma rvore igual ao nmero de nveis desta rvore. Um nodo folha tem altura unitria. Um conjunto de rvores disjuntas forma uma floresta.
Raiz Nvel 1 Nvel 2

Arestas
Grau 3

Nodos folhas

rvores Binrias
So rvores cujos nodos possuem grau 0, 1 ou 2, ou seja tm no mximo 2 sub-rvores, denominadas: sub-rvore esquerda (E) sub-rvore direita (D). rvores binrias combinam as vantagens de 2 estruturas: Vetor ordenado (busca eficiente) Lista encadeada (insero e excluso eficientes) Estrutura de dados:
tipo ArvBin = ^TArvBin TArvBin = registro Chave : inteiro {caracter, string, etc.} E : ArvBin {sub-rvore esquerda} D : ArvBin {sub-rvore direita} {outros campos especficos da aplicao} fim

Percurso em rvores Binrias


1 Percurso em Pr-Ordem (R, E, D) Percorre-se a raiz; a sub-rvore esquerda, em pr-ordem; e a sub-rvore direita, em pr-ordem.
4 2 1 3 5 6 7

4 2 1 3 6 5 7
procedimento Pre_ordem(T : ArvBin) inicio se T Nulo ento inicio Processa(T) Pre_ordem(T^.E) Pre_ordem(T^.D) fim fim

Percurso em rvores Binrias


2. Percurso In-Ordem (E, R, D) Percorre-se: a sub-rvore esquerda, in-ordem; a raiz; e sub-rvore direita, em in-ordem.
4 2 1 3 5 6 7

1 2 3 4 5 6 7
procedimento In_ordem(T : ArvBin) inicio se T Nulo ento inicio In_ordem(T^.E) Processa(T) In_ordem(T^.D) fim fim

Percurso em rvores Binrias


3 Percurso em Ps-Ordem (E, D, R) Percorre-se: a sub-rvore esquerda, em ps-ordem; a sub-rvore direita, em ps-ordem; e a raiz.
4 2 1 3 5 6 7

1 3 2 5 7 6 4
procedimento Pos_ordem(T : ArvBin) inicio se T Nulo ento inicio Pos_ordem(T^.E) Pos_ordem(T^.D) Processa(T) fim fim

Percurso em rvores Binrias


4 Percurso em Nvel

Percorre-se a rvore de cima para baixo e da direita para a esquerda:


procedimento EmNvel(T: ArvBin) declare F : Fila incio se T nulo ento incio Inicializa(F) InsereNaFila(F, T) enquanto FilaVazia(F) = falso faa incio T RetiraDaFila(F) Processa(T) se T^.E nulo ento InsereNaFila(F, T^.E) se T^.D nulo ento InsereNaFila(F, T^.D) fim Finaliza(F) fim fim

4 2 1 3 5 6 7

4 2 6 1 3 5 7

Classificao de rvores Binrias

rvore Estritamente Binria: uma A.B. na qual todo nodo tem 0 ou 2 subrvores, ou seja, nenhum nodo tem filho nico.

Classificao de rvores Binrias


rvore Binria Cheia uma A.B. na qual todos os nodos, exceto os do ltimo nvel, tm exatamente duas sub-rvores. Uma rvore binria cheia de altura h tem 2h-1 nodos.

Classificao de rvores Binrias


rvore Binria Completa uma rvore estritamente binria (nodos com grau 0 ou 2), na qual os nodos folhas podem estar apenas no ltimo ou no penltimo nvel.

Classificao de rvores Binrias


rvore Binria de Pesquisa (ou A.B. Ordenada) aquela na qual todo nodo tem chave maior que o filho esquerdo e menor que o seu filho direito Uma rvore binria de pesquisa s admite uma ocorrncia de cada chave.
4

2 1 3 5 C 6

8 9 7

B A D

E G F

Classificao de rvores Binrias


rvore Binria Balanceada (ou rvore AVL)
aquela na qual as alturas das sub-rvores E e D de qualquer nodo diferem de no mximo 1 (um). Essa diferena chamada fator de balanceamento do nodo. Logo, numa AVL o fator de balanceamento de qq nodo pode se -1, 0 ou 1. AVL = (Adelson-Velskii e Landis, 1962)

Insero em rvores de Pesquisa


Seja K a chave a ser inserida e T um ponteiro para a raiz de uma rvore de pesquisa. Se T = nulo a rvore est vazia e o novo nodo se tornar a raiz da rvore Se T nulo, ento 3 situaes podem ocorrer: 1. K < T^.Chave: o novo nodo s poder ser criado e inserido na sub-rvore esquerda de T, T^.E. Comparase novamente K com T^.E^.Chave e as mesmas trs situaes podem ocorrer. 2. K = T^.Chave: o novo nodo no poder ser criado e inserido, pois uma rvore binria de pesquisa s admite uma ocorrncia de cada chave. 3. K > T^.Chave: o novo nodo s poder ser criado e inserido na sub-rvore direita de T, T^.D, Ento K comparada com T^.D^.Chave, sendo possveis as trs situaes descritas.

Algoritmo para insero em AP


funo Ins_ArvBinPesq(PorRef T : ArvBin; K : Inteiro) : lgico incio se T = nulo ento incio T CriaNodo {aloca memria para um novo nodo} T^.Chave K retorne verdadeiro fim seno incio se K < T^.Chave ento retorne Ins_ArvBinPesq(T^.E, K) seno se K = T^.Chave ento retorne falso seno retorne Ins_ArvBinPesq(T^.D, K) fim fim

Excluso em rvores de Pesquisa


A excluso de um nodo T em uma rvore de pesquisa envolve a anlise de casos possveis: 1. T um nodo folha: basta "destruir" T e faz-lo apontar para nulo. 2. T possui apenas um nodo filho: basta "destruir" T e faz-lo apontar para o seu nodo filho. 3. T possui dois nodos filhos: para manter a rvore ordenada, h duas alternativas:

substituir o contedo de T pelo contedo do


nodo antecessor (o mais direita de T^.E).

substituir o contedo de T pelo contedo do


nodo sucessor (o mais esquerda de T^.D). Neste 3o caso, o nodo removido (destrudo) o nodo antecessor ou o nodo sucessor, cuja remoo sempre leva ao casos 1 ou ao caso 2.

Algoritmo para excluso em AP


funo ExcluiNodo_ArvBinPesq(PorRef T: ArvBin; K: inteiro) : lgico declare N: ArvBin incio se T = nulo ento {Abandona sem fazer nada} retorne falso se K = T^.Chave ento {chave encontrada!} incio N T se T^.E = nulo ento {T pode ter apenas o filho D} T T^.D seno se T^.D = nulo ento {T tem apenas o filho esquerdo} T T^.E seno {T tem 2 filhos } incio N Antecessor(T^.E) {acha o nodo antecessor } T^.K N.K {substitui o contedo de T pelo de N} fim destroi(N) {libera os recursos alocados para N} retorne verdadeiro fim seno se K < T^.Chave ento retorne ExcluiNodo_ArvBinPesq(T^.E, K) seno retorne ExcluiNodo_ArvBinPesq(T^.D, K) fim funo Antecessor(PorRef X : ArvBin) : ArvBin declare r : ArvBin incio se X^.D = nulo ento {X o nodo mais direita} incio r X X X^.E retorne r fim seno {desce mais um nvel, pela direita} retorne Antecessor(X^.D) fim

rvores Balanceadas (ou AVL)


AVL = (Adelson-Velskii e Landis, 1962) Em uma rvore balanceada as alturas das sub-rvores E e D de qualquer nodo N diferem de no mximo 1 (um). Essa diferena chamada fator de balanceamento:

FB(N) = Altura(N^.D) Altura(N^.E)


Portanto, Se FB (N) = 0,

as duas sub-rvores tm a mesma altura. a sub-rvore direita mais alta que a esquerda. a sub-rvore esquerda mais alta que a direita;

Se FB (N) > 0, Se FB(N) < 0,

Em uma AVL, |FB(N)| 1 para todos os nodos A altura mxima de uma AVL no mximo 45% maior que uma rvore perfeitamente balanceada.

Insero numa rvore AVL


A insero de um novo nodo feita exatamente como numa rvore de pesquisa convencional. Se esta insero implicar em |FB| > 1 para algum(s) ancestral(ais) do nodo inserido, o desequilbrio corrigido atravs de rotao de nodos. Rotaes Simples:
Pai e Filho tm desequilbrio para o mesmo lado, ou fatores de balano com o mesmo sinal.

Rotao Direita
03 02 01
0 -1 -2

RotDir
P Pai(N) {pai do nodo} F P^.E {filho esquerdo} se P Nulo ento P^.E F N^.E F^.D F^.D N N F

02 01
0

03

Rotao Esquerda
01
+2

RotEsq
P Pai(N) {pai do nodo} F P^.D {filho direito} se P Nulo ento P^.D F N^.D F^.E F^.E N N F

02

+1

02
0

03

01

03

Rotaes Duplas: (2 rotaes simples, cada uma para um lado)


Pai e Filho tm desequilbrio para lados opostos, ou fatores de balano com sinais opostos.

Dupla Rotao Direita


03 01
+1 -2

DupRotDir
RotEsq(N^.E)

03 02
-1

-2

02 01
0

RotDir(N)
0

02

01

03

Dupla Rotao Esquerda


01
+2

DupRotDir
RotDir(N^.D)

01 03
-1

+2

02

+1

02
0

RotEsq(N)
0

02

03

01

03

Anda mungkin juga menyukai