logo

Árvore AVL

A árvore AVL foi inventada por GM Adelson - Velsky e EM Landis em 1962. A árvore é chamada de AVL em homenagem a seus inventores.

A árvore AVL pode ser definida como uma árvore de pesquisa binária com altura balanceada em que cada nó está associado a um fator de equilíbrio que é calculado subtraindo a altura de sua subárvore direita daquela de sua subárvore esquerda.

Diz-se que a árvore está balanceada se o fator de equilíbrio de cada nó estiver entre -1 e 1, caso contrário, a árvore ficará desequilibrada e precisará ser balanceada.

Fator de equilíbrio (k) = altura (esquerda (k)) - altura (direita (k))

Se o fator de equilíbrio de qualquer nó for 1, significa que a subárvore esquerda está um nível acima da subárvore direita.

Se o fator de equilíbrio de qualquer nó for 0, significa que a subárvore esquerda e a subárvore direita contêm altura igual.

Se o fator de equilíbrio de qualquer nó for -1, significa que a subárvore esquerda está um nível abaixo da subárvore direita.

Uma árvore AVL é fornecida na figura a seguir. Podemos ver que o fator de equilíbrio associado a cada nó está entre -1 e +1. portanto, é um exemplo de árvore AVL.

Árvore AVL

Complexidade

Algoritmo Caso médio Pior caso
Espaço sobre) sobre)
Procurar o(log n) o(log n)
Inserir o(log n) o(log n)
Excluir o(log n) o(log n)

Operações na árvore AVL

Devido ao fato de que a árvore AVL também é uma árvore de busca binária, todas as operações são realizadas da mesma forma que em uma árvore de busca binária. A busca e o deslocamento não levam à violação da propriedade da árvore AVL. Porém, inserção e exclusão são as operações que podem violar esta propriedade e, portanto, precisam ser revisitadas.

SN Operação Descrição
1 Inserção A inserção na árvore AVL é realizada da mesma forma que em uma árvore binária de busca. No entanto, isso pode levar à violação da propriedade da árvore AVL e, portanto, a árvore pode precisar de balanceamento. A árvore pode ser equilibrada aplicando rotações.
2 Eliminação A exclusão também pode ser realizada da mesma maneira que em uma árvore de pesquisa binária. A exclusão também pode perturbar o equilíbrio da árvore, portanto, vários tipos de rotações são usados ​​para reequilibrar a árvore.

Por que árvore AVL?

A árvore AVL controla a altura da árvore de pesquisa binária, não permitindo que ela seja distorcida. O tempo necessário para todas as operações em uma árvore de busca binária de altura h é Oh) . No entanto, pode ser estendido para Sobre) se o BST ficar distorcido (ou seja, no pior caso). Ao limitar esta altura ao log n, a árvore AVL impõe um limite superior em cada operação a ser O (log n) onde n é o número de nós.

Rotações AVL

Realizamos rotação na árvore AVL apenas caso o Fator de Equilíbrio seja diferente -1, 0 e 1 . Existem basicamente quatro tipos de rotações que são as seguintes:

  1. Rotação L L: o nó inserido está na subárvore esquerda da subárvore esquerda de A
  2. Rotação R R: o nó inserido está na subárvore direita da subárvore direita de A
  3. Rotação L R: o nó inserido está na subárvore direita da subárvore esquerda de A
  4. Rotação R L: o nó inserido está na subárvore esquerda da subárvore direita de A

Onde o nó A é o nó cujo fator de equilíbrio é diferente de -1, 0, 1.

As duas primeiras rotações LL e RR são rotações simples e as próximas duas rotações LR e RL são rotações duplas. Para uma árvore ficar desequilibrada a altura mínima deve ser no mínimo 2, Vamos entender cada rotação

1. Rotação RR

Quando o BST fica desequilibrado, devido a um nó ser inserido na subárvore direita da subárvore direita de A, então realizamos a rotação RR, a rotação RR é uma rotação anti-horária, que é aplicada na aresta abaixo de um nó com fator de equilíbrio -2

Rotações AVL

No exemplo acima, o nó A tem fator de equilíbrio -2 porque um nó C é inserido na subárvore direita de A subárvore direita. Realizamos a rotação RR na aresta abaixo de A.

2. Rotação LL

Quando o BST fica desequilibrado, devido a um nó ser inserido na subárvore esquerda da subárvore esquerda de C, então realizamos a rotação LL, a rotação LL é a rotação no sentido horário, que é aplicada na aresta abaixo de um nó com fator de equilíbrio 2.

Rotações AVL

No exemplo acima, o nó C tem fator de equilíbrio 2 porque um nó A é inserido na subárvore esquerda da subárvore esquerda C. Realizamos a rotação LL na aresta abaixo de A.

3. Rotação LR

As rotações duplas são um pouco mais difíceis do que a rotação única, que já foi explicada acima. Rotação LR = rotação RR + rotação LL, ou seja, a primeira rotação RR é realizada na subárvore e depois a rotação LL é realizada na árvore completa, por árvore completa entendemos o primeiro nó do caminho do nó inserido cujo fator de equilíbrio é diferente de -1 , 0 ou 1.

Vamos entender cada etapa com muita clareza:

Estado Ação
Rotações AVL Um nó B foi inserido na subárvore direita de A, a subárvore esquerda de C, por causa do qual C se tornou um nó desequilibrado com fator de equilíbrio 2. Este caso é a rotação L R onde: O nó inserido está na subárvore direita da subárvore esquerda de C
Rotações AVL Como rotação LR = rotação RR + rotação LL, portanto, RR (sentido anti-horário) na subárvore com raiz em A é executado primeiro. Ao fazer rotação RR, nó A , tornou-se a subárvore esquerda de B .
Rotações AVL Após realizar a rotação RR, o nó C ainda está desequilibrado, ou seja, possui fator de equilíbrio 2, pois o nó A inserido está à esquerda da esquerda C
Rotações AVL Agora realizamos rotação LL no sentido horário na árvore completa, ou seja, no nó C. nó C agora se tornou a subárvore direita do nó B, A é a subárvore esquerda de B
Rotações AVL O fator de equilíbrio de cada nó agora é -1, 0 ou 1, ou seja, o BST está balanceado agora.

4. Rotação RL

Como já discutido, as rotações duplas são um pouco mais difíceis do que a rotação única, que já foi explicada acima. Rotação R L = rotação LL + rotação RR, ou seja, a primeira rotação LL é realizada na subárvore e depois a rotação RR é realizada na árvore completa, por árvore completa entendemos o primeiro nó do caminho do nó inserido cujo fator de equilíbrio é diferente de -1 , 0 ou 1.

Estado Ação
Rotações AVL Um nó B foi inserido na subárvore esquerda de C a subárvore direita de A , por causa do qual A se tornou um nó desequilibrado com fator de equilíbrio - 2. Este caso é a rotação RL onde: O nó inserido está na subárvore esquerda da subárvore direita de A
Rotações AVL Como rotação RL = rotação LL + rotação RR, portanto, LL (sentido horário) na subárvore com raiz em C é executado primeiro. Ao fazer rotação RR, nó C tornou-se a subárvore certa de B .
Rotações AVL Depois de realizar a rotação LL, o nó A ainda está desequilibrado, ou seja, tendo fator de equilíbrio -2, que é devido à subárvore direita do nó A da subárvore direita.
Rotações AVL Agora realizamos rotação RR (rotação anti-horária) na árvore completa, ou seja, no nó A. nó C agora se tornou a subárvore direita do nó B e o nó A se tornou a subárvore esquerda de B.
Rotações AVL O fator de equilíbrio de cada nó agora é -1, 0 ou 1, ou seja, o BST está balanceado agora.

P: Construa uma árvore AVL com os seguintes elementos

H, I, J, B, A, E, C, F, D, G, K, L

1. Insira H, I, J

Rotações AVL

Ao inserir os elementos acima, principalmente no caso de H, o BST fica desequilibrado pois o Fator de Equilíbrio de H é -2. Como o BST está inclinado para a direita, realizaremos a rotação RR no nó H.

A árvore de equilíbrio resultante é:

Rotações AVL

2. Insira B, A

Rotações AVL

Ao inserir os elementos acima, especialmente no caso de A, o BST fica desequilibrado porque o fator de equilíbrio de H e I é 2, consideramos o primeiro nó do último nó inserido, ou seja, H. Como o BST de H é inclinado para a esquerda, realizaremos a rotação LL no nó H.

A árvore de equilíbrio resultante é:

Rotações AVL

3. Insira E

Rotações AVL

Ao inserir E, o BST fica desequilibrado pois o Fator de Equilíbrio de I é 2, pois se viajarmos de E para I descobrimos que ele está inserido na subárvore esquerda da subárvore direita de I, realizaremos Rotação LR no nó I. LR = rotação RR + LL

3 a) Primeiro realizamos rotação RR no nó B

A árvore resultante após rotação RR é:

Rotações AVL

3b) Primeiro realizamos rotação LL no nó I

A árvore balanceada resultante após rotação LL é:

Rotações AVL

4. Insira C, F, D

exemplo de árvore de pesquisa binária
Rotações AVL

Ao inserir C, F, D, BST fica desequilibrado pois o Fator de Equilíbrio de B e H é -2, pois se viajarmos de D para B descobrimos que ele está inserido na subárvore direita da subárvore esquerda de B, iremos realizar Rotação RL no nó I. RL = rotação LL + RR.

4a) Primeiro realizamos rotação LL no nó E

A árvore resultante após a rotação LL é:

Rotações AVL

4b) Em seguida, realizamos rotação RR no nó B

A árvore balanceada resultante após rotação RR é:

Rotações AVL

5. Insira G

Rotações AVL

Ao inserir G, o BST fica desequilibrado pois o Fator de Equilíbrio de H é 2, pois se viajarmos de G para H, descobrimos que ele está inserido na subárvore esquerda da subárvore direita de H, realizaremos a Rotação LR no nó I. LR = rotação RR + LL.

5 a) Primeiro realizamos rotação RR no nó C

A árvore resultante após rotação RR é:

Rotações AVL

5 b) Em seguida, realizamos rotação LL no nó H

A árvore balanceada resultante após rotação LL é:

Rotações AVL

6. Insira K

Rotações AVL

Ao inserir K, o BST fica desequilibrado, pois o fator de equilíbrio de I é -2. Como o BST está inclinado para a direita de I para K, realizaremos a rotação RR no nó I.

A árvore balanceada resultante após rotação RR é:

Rotações AVL

7. Insira L

Ao inserir a árvore L ainda está balanceada, pois o fator de equilíbrio de cada nó agora é -1, 0, +1. Portanto, a árvore é uma árvore AVL balanceada

Rotações AVL