Download - Árvores AVL
![Page 1: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/1.jpg)
1
Árvores AVL
Rotação Simples e Dupla
Katia Guimarães
![Page 2: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/2.jpg)
2
Exemplo: 50, 20, 39, 42, 40 ...
Possível Problema
50
20
39
42
A árvore binária pode degenerar para uma estrutura próxima a uma lista ligada, e o tempo de acesso deixa de ser logarítmico.
40
![Page 3: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/3.jpg)
3
Solução
Procurar manter todas as folhas mais ou menos na mesma altura.
PROPRIEDADE AVL: Para todo nó | altura(dir) - altura(esq) | < 2
![Page 4: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/4.jpg)
4
Exemplo: 50, 20, 10, ...50
20
Após a inserção do elemento 10, a árvore binária perde a propriedade AVL.
SOLUÇÃO: Rotação.
10
Possível Problema
![Page 5: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/5.jpg)
5
Rotação Simples à Direita
Inserção à esquerda de árvore desbalanceada à esquerda (bal = -1)
Promover o elemento do meio através de um giro no sentido horário.
50
20
10
20
10 50
![Page 6: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/6.jpg)
6
Rotação Simples à Esquerda
Inserção à direita de árvore desbalanceada à direita (bal = +1)
Promover o elemento do meio através de um giro no sentido anti-horário.
50
20
10
10
20
50
![Page 7: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/7.jpg)
7
Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.
Rotação Simples
raiz
(-1)A
B C
2
4
![Page 8: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/8.jpg)
8
Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.
Rotação Simples
B
C
1
1
(-1)A
-1 (0)
(0)
(0)
Dir.A
Alt=2Dir.B
Alt=2
![Page 9: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/9.jpg)
9
Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.
Rotação Simples
B
C
Dir.A
Alt=2
1
1 A 0
0
Dir.B
Alt=2
![Page 10: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/10.jpg)
10
Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.
Rotação Simples
raiz
(0)B
A (0) C (1)(1)
4
![Page 11: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/11.jpg)
11
Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.
Rotação Dupla
raiz
B
C
(-1)A
2
5
![Page 12: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/12.jpg)
12
Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.
Rotação Dupla
B
C
(-1)A
21
1
-1+1
-2
![Page 13: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/13.jpg)
13
Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.
Rotação Dupla
C
2
B
E
(-1)A
D
Dir.A
Qualquer que seja a posição de inclusão na sub-árvore de C, a árvore terá a propriedade AVL.
E D Dir.AB A
C
1
1
0 1
0
A altura da sub-árvore é igual à da original.
![Page 14: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/14.jpg)
14
Inserção à direita do nó crítico A com (bal = +1), à esquerda do nó B.
Rotação Dupla
raiz
B
C
(+1)A
2
![Page 15: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/15.jpg)
15
Inserção à direita do nó crítico A com (bal = +1), à esquerda do nó B.
Rotação Dupla
(+1)A
2
B
C
1
1
-1
-1
+2
![Page 16: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/16.jpg)
16
Inserção à direita de nó crítico A com (bal = +1), à esquerda do nó B.
Rotação Dupla
A
C
B
E D
E D
B
C
2
Esq.A
Qualquer que seja a posição de inclusãona sub-árvore de C, a árvore terá a propriedade AVL. IMPORTANTE: Os balances de A e de B podem ser –1 e 0, respectivamente.
1
1
A 0 1
0
Esq.A
![Page 17: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/17.jpg)
17
Inserção à direita de nó crítico A com (bal = +1), à esquerda do nó B.
Rotação Dupla
Os valores dos balances de cada nó são os mesmos, a menos daqueles nos nós A, B e C, que tomam valores dependendo se a inclusão foi à esquerda ou à direita de C.
E D
B
C
1
1
A 0 1
0
Esq.A
![Page 18: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/18.jpg)
18
Encaminhamento top-down: 1. O processamento se inicia pela raiz.
2. O novo vértice inserido será sempre uma folha. 3. Esta nova folha tem balance = 0, e retorna ao pai a informação (Altura Alterada = V, <próprio endereço>)
Considerações para Implementação Recursiva
![Page 19: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/19.jpg)
19
Encaminhamento bottom-up: Se um nó pai receber a info: (V, <ender>)
• Calcular novo balance: Se filho à esq, então Bal Bal – 1 senão Bal Bal +1 • Se Bal = 0 então devolver (F, <próprio ender>) Se Bal = +1 ou –1 então devolver (V, <próprio ender>) Se Bal = +2 ou –2 então { rotacionar; devolver (F, <ender. nova raiz>) }
Considerações para Implementação Recursiva
![Page 20: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/20.jpg)
20
Encaminhamento bottom-up: Se Bal = +1 ou –1 então devolver (V, <próprio ender>)
Considerações para Implementação Recursiva
![Page 21: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/21.jpg)
21
Encaminhamento bottom-up: Se Bal = 0 então devolver (F, <próprio ender>)
Considerações para Implementação Recursiva
![Page 22: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/22.jpg)
22
Se Bal = +2 ou –2 então { rotacionar; devolver (F, <ender. nova raiz>) }
Considerações para Implementação Recursiva
C
2
B
E
(-1)A
D
Dir.AE D Dir.A
B A
C
1
1
0 1
0
A altura da sub-árvore é igual à da original.
![Page 23: Árvores AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052204/56813b97550346895da4cc2d/html5/thumbnails/23.jpg)
23
Encaminhamento bottom-up: Se um nó pai receber a info: (F, <ender>) então devolver (F, <próprio ender>)
Considerações para Implementação Recursiva