1
TAD – Árvore AVL
ATAI
2
Árvore AVLAs Árvores Binárias de Pesquisa têm uma séria desvantagem que pode afectar o tempo necessário para recuperar um item armazenado. A desvantagem é que a estrutura da árvore depende da ordem em que os elementos são inseridos. Sabemos que se inserirmos os elementos já em ordem, a estrutura da árvore será igual a de uma lista encadeada e o tempo médio para recuperar uma informação da árvore aumenta.
10
60
60
50
40
30
20
20
50
40
30
10
A procura é mais rápida na árvore binária de pesquisa equilibrada/balanceada.
Árvore AVL é uma árvore binária de pesquisa equilibrada em altura. Para cada nó da árvore as alturas das respectivas subárvores esquerda e direita diferem apenas em um.
3
Para manter o equilíbrio da árvore guardamos em cada nó um “factor de equilíbrio”, designado por balance (bal) do tipo inteiro.
bal = altura (right) - altura (left)
Como estes duas alturas diferem de pelo menos em 1, o valor de bal deve ser -1, 0 ou +1.
As operações são iguais à da árvore binária de pesquisa. Só as operações de insert and deletekey devem ser modificados. Elas devem manter o equilíbrio da árvore.
Árvore AVL - factor de equilíbrio
4
Insert determina a localização do novo elemento e adiciona-o.
Durante a operação insert permitimos temporariamente que o valor de bal possa ser -2 e +2.
Quando isto acontece, a árvore deixa de estar equilibrada, sendo necessário uma ou duas rotações para a equilibrar de novo.
Distinguimos entre rotações simples e duplas. As rotações simples diferem entre rotação esquerda e rotação direita.
Árvore AVL - operação insert
5
Árvore AVL - operação insert
1. Adicionar o nó como em árvore binária de pesquisa. O caminho para este nó é o caminho de pesquisa.
2. Subir no caminho de pesquisa actualizando os valores do bal dos nós, até encontrar um nó não balanceado mais perto do novo nó ( tem o valor do bal +2 ou -2). Chamar este nó o eixo.
3. A. Se não existir o eixo, a árvore continua a ser árvore AVL e podemos acabar a operação de inserção actualizando os valores do bal de todos os nós do caminho de pesquisa.
B. Se o eixo existe, então para manter a árvore AVL devemos efectuar rotação (direita, esquerda ou dupla) de modo que os valores do bal fiquem correctos e a árvore é uma árvore AVL.
6
Árvore AVL - Tipos de rotações
Que tipo de rotação devemos fazer?
Se o bal do eixo é negativo (sub-árvore esquerda é mais comprida), então
se o bal do nó seguinte do caminho de pesquisa é negativo, então rotação para direita, se não (o bal é positivo), então rotação dupla (esquerda-direita)
Se o bal do eixo é positivo (sub-árvore direita é mais comprida), então
se o bal do nó seguinte do caminho de pesquisa é positivo, então rotação para esquerda, se não (o bal é negativo), então rotação dupla (direita-esquerda)
Top Related