Home

Árvores AVL (Inserção)

(aula 12)

 

As árvores AVL, propostas por Adel’son, Vel’skii e Landis em 1962, foram historicamente a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logarítmico.

Uma árvore binária de busca A é uma árvore AVL, ou tem a propriedade AVL, tal que, para qualquer nó n de A, as alturas de suas subárvores (fe, fd) diferem no máximo de 1:

|h(fe) – h(fd) | <= k  : k = 0, 1

. Na figura  estão representadas duas árvores binárias de busca. A da esquerda (a) não é AVL, pois a altura da subárvore direita da raiz é 1 e a da esquerda é 3.

Inserção:

Seja c uma nova chave a inserir numa arvore AVL A. Primeiro, c é inserido como folha de A, seguindo o algoritmo de inserção numa Árvore Binaria Ordenada. Se depois da inserção a árvore fica AVL, então nada há a fazer, senão é necessário tornar AVL.

Para que uma inserção resulte imediatamente numa árvore AVL, é preciso ter pelo menos um nó da árvore inicial tal que uma subárvore tem altura estritamente superior à da outra, e que a inserção seja realizada na outra subárvore. Seja n o nó de maior nível que enraíza uma subárvore S que não tem propriedade AVL depois da inserção. Em consequência, essa subárvore S tem uma altura estritamente superior a 0, e não é vazia. Supondo que E é a subárvore esquerda de S e tem altura maior que D, a subárvore direita de S. Seja a a altura de D, logo a+1 é a altura de E. Seja ne a raiz de E, EE e ED são as subárvores à esquerda e à direita de ne . Necessariamente, a é a altura da mais alta das subárvores de ne . Há assim dois casos possíveis:

. Inserções à esquerda resultando em árvores não AVL

Caso (a) – A inserção ocorre em EE. Como, por hipótese o resultado da inserção não é AVL, as alturas de EE antes e depois da inserção devem ser a e a+1. Neste caso qual é altura de ED? Como a árvore era inicialmente balanceada, a altura de EE é a ou a-1. Mas não pode ser a-1, pois, neste caso ne é um nó que enraíza uma subárvore que não é AVL e o seu nível é superior ao de n. O novo nó é inserido na subárvore esquerda de ne . Depois desta inserção, a altura da subárvore esquerda de n é a+2 e a altura da subárvore direita é a. Para corrigir esse desequilibro, a subárvore é rearranjada usando uma rotação simples à direita.

Caso(b) – A inserção ocorre em ED. Como, por hipótese o resultado da inserção não é AVL, as alturas de ED antes e depois da inserção devem ser a e a+1. Para as mesmas razões apresentadas no ponto anterior a altura de EE é a. Como o novo nó é inserido em ED, a altura de E torna-se igual a a+2, enquanto que a altura de D permaneceu igual a a. O equilíbrio é restabelecido usando uma rotação dupla à direita.

No caso simétrico, onde é a subárvore direita da raiz que está inicialmente mais alta que a subárvore esquerda:

. Inserções à direita resultando em arvores não AVL.

Caso(c) – A inserção à direita, simétrica do caso(a).

Caso(d) – A inserção à direita, simétrica do caso(b).

Uma vez transformada a árvore por rotação simples ou dupla, de tal maneira a reequilibrar a subárvore enraizada no nó de maior nível, o algoritmo de inserção procede, procurando o segundo de maior nível que enraíza uma subárvore que não tem propriedade AVL, até que todas as subárvores estejam equilibradas.

Rotação Simples:

Para explicar a rotação simples, tratemos do caso particular da rotação simples a direita, sendo a rotação simples à esquerda a operação simétrica.

A operação de rotação simples à direita segue os seguintes passos:

1.      ne é colocado na raiz

2.        EE permanece a subárvore esquerda de ne

3.        n torna-se a raiz da subárvore direita de ne

4.      ED é a nova subárvore esquerda de n

5.      D permanece a subárvore direita de n

. Rotação simples à direita.

A operação simétrica é a rotação simples à esquerda que corresponde ao caso(c). É de notar que, em todos os casos, depois de inserir e rearranjar, a altura da subárvore volta ao seu valor inicial a+2, A tinha propriedade AVL, depois da inserção, A permanece AVL.

. Rotação simples à esquerda.

Rotação Dupla:

No caso(b), uma rotação dupla à direita é necessária. Observar que ED tem altura a+1, onde a>0. Consequentemente, ED tem pelo menos um nó. Assim a rotação dupla à direita é formada pelas seguintes etapas:

1.      O nó ned é a nova raiz, ne é sua filha direita, e n sua filha esquerda

2.      As subárvores esquerda e direita de ne são respectivamente EE e EDE

3.      As subárvores esquerda e direita de ned são respectivamente EDD e D

. Rotação dupla à direita.

Por hipótese EE, EDE, EDD e D têm a propriedade AVL e são de altura a. Em consequência, as subárvores enraizadas em ne e n tem a propriedade AVL e altura a+1. Em conclusão a arvore enraizada em ned tem a propriedade AVL. Assim, depois de inserir e rodar, a altura da subárvore S é de novo o seu valor inicial a+2, portanto A permanece AVL.

O algoritmo implementando estas operações é baseado no facto que uma rotação dupla é equivalente a duas rotações simples consecutivas.

 

Paulo Renato nº 8503 – Ensino Informática

Rui Rodrigues nº13607 –Engª Sistemas e Computação