You are on page 1of 5

Estrutura de Dados 2 - Aulas 09 e 10 - rvore Binria de Busca

Balanceada

1 Introduo
As rvores binrias de pesquisa so, em alguns casos, pouco recomendveis para as operaes bsicas (insero,
remoo e busca). Operaes de insero e remoo seguidas podem degenerar a rvore. O pior caso para
uma operao de busca rvore bin aria de busca degenerada O(n). A Figura 1 apresenta um exemplo para o
pior caso da busca.

1 3

Figura 1: Exemplo de rvore degenerada: pior caso para busca.

Note que uma rvore binria de busca ideal (que demanda o menor nmero de comparaes para a busca
de um elemento) uma rvore binria completa. Uma rvore com tal caracterstica dita ser completamente
balanceada.
Uma rvore binria completa leva um tempo na ordem de O(log n) para operaes de insero, remoo e
pesquisa. Sabemos que uma rvore binria completamente balanceada pode deixar de ser completa aps uma
insero ou uma remoo. Veja a Figura 2 para entender o que acontece se inserirmos a chave 1 na rvore
completa ilustrada.

5
5
3 7
3 7
2 4 6
2 4 6
1

Figura 2: Insero da chave 1 na rvore.

No caso da Figura 2, para manter a rvore completamente balanceada, precisamos movimentar todos os ns,
como mostra a Figura 3. Tal tarefa muito custosa!

5
4
3 7
2 6
2 4 6
1 3 5 7
1

Figura 3: Rearranjo dos ns para reestabelecer a rvore completa.

1
Para que o processo de busca tenha eficincia prxima eficincia de uma rvore binria de busca comple-
tamente balanceada, implementamos rvores binrias quase balanceadas.
A ideia exigir que a altura de tais rvores sejam da mesma ordem de grandeza que a de uma rvore
completa com o mesmo nmero de ns. Isto , que possuam altura igual a O(log n). Alm disso, desejvel
que esta propriedade se estenda a todas as subrvores: cada subrvore que tiver m ns dever ter altura igual a
O(log m). Uma rvore que satisfaa tal condio denominada balanceada. Tal estratgia visa manter a altura
da rvore em O(log n), no pior caso. Como no h a rigidez de uma rvore completa, mais fcil manter o
balanceamento da rvore. Para tal, podemos utilizar, por exemplo, algumas das seguintes restries:
Fazer que todas as folhas aparecem no mesmo nvel;

Restringir a diferena entre as alturas das subrvores de cada n;


Minimizar o comprimento do caminho interno da rvore.
Veremos agora dois tipos de rvores balanceadas: as rvores AVL e as rvores Rubro-Negra.

1.1 rvores AVL


Uma rvore binria T denominada AVL quando, para qualquer n v de T , as alturas de suas subrvores,
direita e esquerda, diferem em mdulo de at uma unidade. Neste caso, dizemos que v um n regulado. Caso
um n no satisfaa tal condio, dizemos que ele desregulado e a rvore que possui um n desregulado
tambm chamada de desregulada. A Figura 4 apresenta exemplos de rvore AVL.

6
5
3 9
3 7
2 5 7 11
2 4 6
1 8 10 15
1
14

Figura 4: Exemplos de rvores AVL.

Para analisar os casos que devemos tratar no processo de incluso de uma nova chave em uma rvore AVL,
vamos considerar a rvore T . Para mantermos T balanceado, temos que efetuar operaes de reestabelecimento
do balanceamento de cada n aps a incluso de cada chave em T . A ideia consiste em verificar, aps cada
incluso, se algum n p se encontra desregulado, ou seja, se o mdulo da diferena entre as alturas de suas
subrvores tornou-se maior que 1.
Suponha que um n q foi inserido na rvore T . Se aps a incluso, todos os ns se mantiverem regulados,
ento a rvore continua AVL e no h nada o que fazer. Caso contrrio, seja p o n mais prximo s folhas
que se tornou desregulado. Note que no h ambiguidades na escolha de p, pois qualquer subrvore de T que
se tornou desregulada aps a incluso de q deve conter p. Ento p est no caminho de q at a raiz de T e
sua escolha nica. Sejam hE (p) e hD (p) as alturas da subrvore esquerda de p e da subrvore direita de p,
respectivamente. Como p est desregulado, temos que |hE (p) hD (p)| = 2. Vamos analisar agora os casos
possveis. Nas ilustraes a seguir, as subrvores T1 , T2 , T3 e T4 podem ser vazias ou no. O n p chamado
de raiz da rotao.

Caso 1. hE (p) > hD (p): Ento q pertence a subrvore esquerda de p. Alm disso, p possui filho esquerdo
u 6= q. Pois, caso contrrio, p no estaria desregulado. Finalmente, por esse mesmo motivo, sabe-se
que hE (u) 6= hD (u). As duas seguintes situaes podem ocorrer:

Caso 1.1 hE (u) > hD (u): (Rotao direita) Tal situao e ilustrada na figura a seguir. Note que
h(T1 ) h(T2 ) = 1 e h(T2 ) = h(T3 ). consequentemente, uma rotao direita restabelece a
regulagem de p.
Caso 1.2 hE (u) < hD (u): (Rotao dupla direita) Ento u possui filho direito v e a situao ilustrada
abaixo. Neste caso, temos:

|h(T2 ) h(T3 )| 1 e max{h(T2 ), h(T3 )} = h(T1 ) = h(T4 ).


p u

u T3 T1 p

T1 T2 T2 T3

p
v
u T4
u p

T1 v
T1 T2 T3 T4
T2 T3

Caso 2. hD (p) > hE (p) : Ento p possui o filho direito z 6= q, com hE (z) 6= hD (z), e as demais situaes so as
seguintes:
Caso 2.1 hE (z) < hD (z) : (Rotao esquerda) Neste caso, temos:

h(T3 ) h(T2 ) = 1 e h(T2 ) = h(T1 ).

p z

T1 z p T3

T2 T3 T1 T2

Caso 2.2 hE (z) > hD (z) : (Rotao dupla esquerda) Ento z possui filho esquerdo y e a situao
ilustrada abaixo. A relao das alturas das subrvores :

|h(T2 ) h(T3 )| 1 e max{h(T2 ), h(T3 )} = h(T1 ) = h(T4 ).

Uma rotao dupla esquerda reestabelece o balanceamento da subrvore.

p
y
T1 z
p z

y T4
T1 T2 T3 T4
T2 T3

Observe que, aps qualquer transformao apresentada acima, o n pai da subrvore em questo encontrar-
se- regulado, uma vez que o processo reduz a altura da subrvore de uma unidade. Isso garante a regulagem
de todos os ancestrais de p na rvore.

1.1.1 Procedimento de Incluso em AVL


Seja T uma rvore AVL e x uma chave a ser includa em algum novo n q. Os casos a serem analisados so:
1) Se x j existe na rvore: ento o procedimento termina, pois no h nada o que fazer.
2) Se x no existir em T , ento realizamos a incluso propriamente dita e, em seguida, verificamos se algum n
na rvore ficou desregulado.
a) Em caso negativo, o procedimento termina, pois T continua sendo uma rvore AVL.
b) Em caso positivo, devemos verificar em qual dos casos listados o n desregulado se enquadra e aplicamos
a respectiva rotao.
Para determinar se um n v de T ficou desregulado aps a insero de um novo n q, basta analisarmos a
diferena entre as alturas das subrvores de v. Para tornar o processo eficiente, vamos armazenar em cada n
v de T o rtulo balano(v) = hD (v) hE (v). Sabemos que um n est regulado quando

1 balano(v) 1.

A atualizao do rtulo balano(v) ocorre sempre que um novo n q inserido em alguma subrvore de v
e essa insero ocasionar no aumento da altura dessa subrvore. Ou seja, se o n q inserido na subrvore
esquerda de v, ento o rtulo balano(v) diminuido de uma unidade, se q inserido na subrvore direita de
v, o rtulo aumentado de uma unidade. Tal atualizao pode se propagar por todos os ns no caminho de q
at a raiz. Vamos analisar os casos possveis quando q inserido na subrvore esquerda de v com aumento da
altura da subrvore em questo.
Caso 1. balano(v) = 1 antes da incluso de q.
Neste caso, balano(v) torna-se 0 e a altura da subrvore com raiz v no alterada. Consequentemente,
as alturas dos ns no caminho de v at a raiz tambm no so modificadas.
Caso 2. balano(v) = 0 antes da incluso de q.
Neste caso, balano(v) torna-se 1 e a altura da subrvore com raiz v foi modificada. Consequente-
mente, os ns restantes do caminho at a raiz tambm podem ter suas alturas modificadas e precisam
ser analisados. Caso v seja a raiz da rvore, ento a anlise se encerra, pois nenhum n se tornou
desregulado. Caso contrrio, devemos repetir o processo substituindo v por seu pai.
Caso 3. balano(v) = 1 antes da incluso de q.
Neste caso, balano(v) torna-se 2 e o n est desregulado. A rotao correta deve ser empregada.
Qualquer rotao implica que a subrvore resultante tenha a mesma altura da subrvore antes da
incluso. Logo, as alturas dos ancestrais de v no precisam mais ser avaliados.
Quando inserimos o n q na subrvore direita de v devemos considerar casos simtricos aos descritos acima.
A alocao de um novo n realizada o procedimento inicioNo, apresentada abaixo.
1 Procedimento i n i c i o N o ( pt : a r v o r e , x : i n t e i r o ) :
2 Incio :
3 alocar(pt) ;
4 pt .esq ; pt .dir ;
5 pt .chave x ; pt .balanco 0 ;
6 Fim .

A atualizao dos rtulos balano nos ns realizado nos procedimentos caso1 e caso2. O primeiro procedi-
mento trata das inseres feitas na subrvore esquerda do n pt que levam ao aumento da altura da subrvore.
O segundo procedimento trata das inseres na subrvore direita de pt que levam ao aumento de sua altura.
1 Procedimento c a s o 1 ( pt : a r v o r e , h : l o g i c o ) : // i n s e r c a o na s u b a r v o r e e s q u e r d a
2 VAR
3 ptu , ptv : a r v o r e ;
4 Incio :
5 ptu pt .esq ;
6 Se ptu .balanco = 1 , ento : // r o t a c a o d i r e i t a
7 pt .esq ptu .dir ; ptu .dir pt ;
8 pt .balanco 0 ; pt ptu ;
9 Seno // r o t a c a o dupla d i r e i t a
10 ptv ptu .dir ;
11 ptu .dir ptv .esq ; ptv .esq ptu ;
12 pt .esq ptv .dir ; ptv .dir pt ;
13 Se ptv .balanco = 1 , ento :
14 pt .balanco 1 ;
15 Seno
16 pt .balanco 0 ;
17 FimSe
18 Se ptv .balanco = 1 , ento :
19 ptu .balanco 1 ;
20 Seno
21 ptu .balanco 0 ;
22 FimSe
23 pt ptv ;
24 FimSe
25 pt .balanco 0 ;
26 hF;
27 Fim .

1 Procedimento c a s o 2 ( pt : a r v o r e , h : l o g i c o ) : // i n s e r c a o na s u b a r v o r e d i r e i t a
2 VAR
3 ptu , ptv : a r v o r e ;
4 Incio :
5 ptu pt .dir ;
6 Se ptu .balanco = 1 , ento : // r o t a c a o e s q u e r d a
7 pt .dir ptu .esq ; ptu .esq pt ;
8 pt .balanco 0 ; pt ptu ;
9 Seno // r o t a c a o dupla e s q u e r d a
10 ptv ptu .esq ;
11 ptu .esq ptv .dir ; ptv .dir ptu ;
12 pt .dir ptv .esq ; ptv .esq pt ;
13 Se ptv .balanco = 1 , ento :
14 pt .balanco 1 ;
15 Seno
16 pt .balanco 0 ;
17 FimSe
18 Se ptv .balanco = 1 , ento :
19 ptu .balanco 1 ;
20 Seno
21 ptu .balanco 0 ;
22 FimSe
23 pt ptv ;
24 FimSe
25 pt .balanco 0 ;
26 hF;
27 Fim .

Por fim, o procedimento InsereAV L realiza a insero de uma nova chave x em uma rvore AVL de raiz
pt. Utilizamos a varivel h para indicar se a insero do n com a chave x aumentou a altura da subrvore em
questo. Tal informao importante para realizarmos os balanceamentos nos ns da rvore.
1 Procedimento InsereAVL ( x : i n t e i r o , pt : a r v o r e , h : l o g i c o ) :
2 Incio :
3 Se pt = , ento :
4 inicioN o(pt) ;
5 hV ;
6 Seno
7 Se x = pt .chave , ento :
8 Pare ;
9 FimSe
10 Se x < pt .chave , ento :
11 insereAV L(x, pt .esq, h) ;
12 Se h , ento :
13 Caso pt .balanco s e j a :
14 1 : pt .balanco 0 ; h F ;
15 0 : pt .balanco 1 ;
16 1: caso1(pt, h) ; / r e b a l a n c e a m e n t o /
17 FimCaso
18 FimSe
19 Seno
20 insereAV L(x, pt .dir, h) ;
21 Se h , ento :
22 Caso pt .balanco s e j a :
23 1: pt .balanco 0 ; h F ;
24 0 : pt .balanco 1 ;
25 1 : caso2(pt, h) ; / r e b a l a n c e a m e n t o /
26 FimCaso
27 FimSe
28 FimSe
29 FimSe
30 Fim .

You might also like