Árvores avl (adelson-velskii and landis)remoção a árvore não é avl, pois |fb(60)|>1. temos...
TRANSCRIPT
![Page 1: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/1.jpg)
PAA-DCC-UFAM
Árvores AVL(Adelson-Velskii and Landis)
Universidade Federal do Amazonas
Departamento de Eletrônica e Computação
![Page 2: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/2.jpg)
PAA-DCC-UFAM
Introdução (1)
� Árvore Balanceada� Uma árvore binária balanceada é aquela em que, para
qualquer nó, suas sub-árvores esquerda e direita têm a mesma altura
� Árvore AVL� Uma árvore binária de busca é balanceada quando,
para cada nó, as alturas de suas subárvores (sa) esquerda e direita diferem de, no máximo, 1
� Essa diferença é chamada fator de balanceamento, ou FB(n)
![Page 3: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/3.jpg)
PAA-DCC-UFAM
Introdução (2)
� Seja um nó n qualquer da árvore:� FB(n) = altura(sad) – altura(sae)
� se FB(n) = 0, as duas sub-árvores têm a mesma altura
� se FB(n) = -1, a sub-árvore esquerda é mais alta que a direita em 1
� se FB(n) = +1, a sub-árvore direita é mais alta que a esquerda em 1
![Page 4: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/4.jpg)
PAA-DCC-UFAM
Introdução (3)
Exemplos de Árvores AVL
![Page 5: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/5.jpg)
PAA-DCC-UFAM
Introdução (4)
Exemplos de Árvores Não-AVL
![Page 6: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/6.jpg)
PAA-DCC-UFAM
Introdução (5)
� A vantagem da árvore AVL sobre uma degenerada está na eficiência das suas operações de busca � Sendo a altura da AVL bem menor, o número
necessário de comparações diminui sensivelmente
� Numa árvore degenerada de 10.000 nós, são necessárias, em média, 5.000 comparações, numa busca; numa árvore AVL, com o mesmo número de nós, essa média baixa para 14
� O algoritmo deve, a cada inserção, fazer as correções necessárias para garantir que qualquer nó n tenha |FB(n)| <= 1
![Page 7: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/7.jpg)
PAA-DCC-UFAM
Balanceamento (1)
� Como fazemos então para manter uma árvore AVL balanceada?� Inicialmente inserimos um novo nodo na árvore
normalmente� A inserção deste novo nodo pode ou não violar a
propriedade de balanceamento� Caso a inserção do novo nodo não viole a propriedade
de balanceamento podemos então continuar inserindo novos nodos
� Caso contrário precisamos nos preocupar em restaurar o balanço da árvore
� A restauração deste balanço é efetuada através do que denominamos de rotações na árvore
![Page 8: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/8.jpg)
PAA-DCC-UFAM
Balanceamento (2)
� Serão usados dois ponteiros A e B, para auxiliar:
� A é nó ancestral mais próximo do nó inserido com FB(nó) ≠ 0 antes da inserção
� ou a própria raiz se não há nenhum nó com FB(nó) ≠ 0 (antes da inserção) no caminho da busca
� A é também chamado de Pivô
� B é filho de A na sub-árvore onde ocorreu a inserção
� Considerar ligações unidirecionais entre pai e filho
![Page 9: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/9.jpg)
PAA-DCC-UFAM
Exemplo de Desbalanceamento
10
5
(-1)
(0)
Antes da Inserçãodo valor 2
10
5
2
(-2)
(-1)
(0)
Após a Inserçãodo valor 2
A
B
Quem é A e quem é B?
novo nó inserido
FB
![Page 10: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/10.jpg)
PAA-DCC-UFAM
Rotação Simples
proc rotação simplesse FB(A) = +1 // antes da inserção
então rotação simples à esquerdasenão rotação simples à direitafim sezera fatores de A e de B
fim proc
![Page 11: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/11.jpg)
PAA-DCC-UFAM
Rotação Simples à Esquerda
A->dir = B->esq;
10
20
30
A
B(+2)
(+1)
(0)
10
20
30
A
B20
30
B
10
A
B->esq = A;
![Page 12: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/12.jpg)
PAA-DCC-UFAM
Rotação Simples à Direita
A->esq = B->dir;
B->dir = A;
5
10
B
2
A
A
B
10
5
2
(-2)
(-1)
(0)
A10
B5
2
![Page 13: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/13.jpg)
PAA-DCC-UFAM
Exercício: Inserção (1)
� Mostrar as rotações necessárias para a construção da seguinte árvore AVL: 3, 2, 1, 4, 5, 6 e 7
![Page 14: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/14.jpg)
PAA-DCC-UFAM
Exercício: Inserção (2)
� Mostrar as rotações necessárias para a construção da seguinte árvore AVL: 3, 2, 1, 4, 5, 6 e 7
3
2
1
Quem é A? Quem é B? Quais os FB’s?O que é necessário fazer para equilibrar essa árvore?
A
B
(-2)
(-1)
(0)
A->esq = B->dir;
B->dir = A;
![Page 15: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/15.jpg)
PAA-DCC-UFAM
Exercício: Inserção (3)
2
1 3
O resultado da rotação à direita fica...
Após a inserção de 4 e 5 fica...2
1 3
4
5
O que tem que ser feitopara reequilibrar?
(0)
(0)
(0)
(0)
(+2)
(+2)
(+1)
(0)
A
B
A->dir = B->esq;
B->esq = A;
B->pai = A->pai;
![Page 16: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/16.jpg)
PAA-DCC-UFAM
Exercício: Inserção (4)
O resultado da rotação à esquerda fica...
2
1 4
5
O que tem que ser feitopara reequilibrar?
3
Mas quando o 6 é inserido o resultado fica...2
1 4
53
6
(0)
(0) (0)
(0)
(+1)
(0)
(0)
(0)
(+1)
(+1)
(+2)
A
B
A->dir = B->esq;
B->esq = A;
B->pai = A->pai;
![Page 17: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/17.jpg)
PAA-DCC-UFAM
Exercício: Inserção (5)
O resultado da rotação à esquerda fica...
O que tem que ser feitopara re-equilibrar?
Mas quando o 7 é inserido o resultado fica...
4
2 5
631
4
2 5
631
7
(0) (0) (0)
(0) (+1)
(0)
(0) (0)
(0)
(0)
(+1)
(+2)
(+1)
A
B
A->dir = B->esq;
B->esq = A;
B->pai = A->pai;
![Page 18: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/18.jpg)
PAA-DCC-UFAM
Exercício: Inserção (6)
O resultado da rotação à esquerda fica...
4
2 6
731 5
![Page 19: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/19.jpg)
PAA-DCC-UFAM
Rotação Dupla
proc rotação duplase FB(A) = +1 // antes da inserção
então rotação dupla à direitasenão rotação dupla à esquerda
fim seajusta fatores dos nós envolvidos na rotação
fim proc
![Page 20: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/20.jpg)
PAA-DCC-UFAM
Rotação Dupla à Direita (1)
� É composta por uma rotação simples à direita (B e Aux) seguida de uma rotação simples à esquerda (A e Aux)
� Aux é o filho esquerdo de B
![Page 21: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/21.jpg)
PAA-DCC-UFAM
Rotação Dupla à Direita (2)Aux = B->esq;
// rotação simples à direita (B – Aux)
B->esq = Aux->dir;
Aux->dir = B;
// rotação simples à esquerda (A – Aux)
A->dir = Aux->esq;
Aux->esq = A;
25
30
Aux
B
20A20
Aux
A
25
B
3025
30
Aux
A B20
![Page 22: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/22.jpg)
PAA-DCC-UFAM
Rotação Dupla à Esquerda (1)
� É composta por uma rotação simples à esquerda(B e Aux) seguida de uma rotação simples à direita (A e Aux)
� Aux é o filho direito de B
![Page 23: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/23.jpg)
PAA-DCC-UFAM
Rotação Dupla à Esquerda (2)Aux = B->dir;
// rotação simples à esquerda (B – Aux)
B->dir = Aux->esq;
Aux->esq = B;
// rotação simples à direita (A – Aux)
A->esq = Aux->dir;
Aux->dir = A;
20
10
15
A
B
Aux
20
15
10
Aux
A
B
15
10 20
Aux
AB
![Page 24: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/24.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (1)
Como ficaria se fosse inserido o valor 16?
4
2 6
31 5 7
![Page 25: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/25.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (2)
Como ficaria se fosse inserido o valor 15?
16
4
2 6
31 5 7
A Árvore ainda fica OK!
![Page 26: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/26.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (3)
4
2 6
31 5 7
Desequilíbrio no nó 7. Rotação dupla à direita
16
15
15
167
Primeira fase: Rotação simples à direitaSegunda fase: Rotação simples à esquerda
15
16
Aux
B
7A
Aux = B->esq;
// rotação simples à direita (B – Aux)
B->esq = Aux->dir;
Aux->dir = B;
// rotação simples à esquerda (A – Aux)
A->dir = Aux->esq;
Aux->esq = A;
Aux->pai = A->pai;
A
B
![Page 27: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/27.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (4)
Agora a árvore está OK!
16
4
2 6
31 5
7
15
E se inseríssemos o 14?
![Page 28: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/28.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (5)
Desequilíbrio no nó 6. Rotação dupla à direitaPrimeira fase: Rotação simples à direita
16
4
2 6
31 5 15
14
715
7
1614
A
B
Aux
Aux = B->esq;
// rotação simples à direita (B – Aux)
B->esq = Aux->dir;
Aux->dir = B;
Aux->pai = B->pai;
B
Aux
![Page 29: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/29.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (6)
15
4
2 6
31 5 7
1614
Segunda fase: Rotação simples à esquerda
15
7
6
16145
A
Aux
B
// rotação simples à esquerda (A – Aux)
A->dir = Aux->esq;
Aux->esq = A;
Aux->pai = A->pai;
![Page 30: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/30.jpg)
PAA-DCC-UFAM
Exemplo: Rotação Dupla (7)
Agora a árvore está OK!
15
4
2 7
31 6
16145
![Page 31: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/31.jpg)
PAA-DCC-UFAM
Exercício (1)
� Mostre a árvore AVL que resulta após a inserção bem-sucedida das chaves 41, 38, 31, 12, 19, 45
![Page 32: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/32.jpg)
PAA-DCC-UFAM
Exercício (1)
� Mostre a árvore AVL que resulta após a inserção bem-sucedida das chaves 41, 38, 31, 12, 19, 45
45
38
19 41
3112
Resposta: Envolve uma rotação simples à direita e uma rotaçãodupla à esquerda
![Page 33: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/33.jpg)
PAA-DCC-UFAM
Exercício (2)
� Mostre a árvore AVL que resulta após a inserção bem-sucedida das chaves 41, 38, 31, 12, 19, 8
![Page 34: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/34.jpg)
PAA-DCC-UFAM
Exercício (2)
� Mostre a árvore AVL que resulta após a inserção bem-sucedida das chaves 41, 38, 31, 12, 19, 8
Resposta: Envole uma rotação simples à direita, uma rotação duplaà esquerda seguida de uma rotação simples à direita
41
19
12 38
8 31
http://webdiis.unizar.es/asignaturas/EDA/AVLTree/avltree.html
![Page 35: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/35.jpg)
PAA-DCC-UFAM
Remoção
� Inicialmente, faz-se a retirada do nó, usando o algoritmo de busca e retirada de uma ABB
� Se não desbalanceou, o processo está encerrado� Se desbalanceou a árvore, isto é, se um ou mais
nós ficou com |FB(nó)|>1, raciocina-se em termos de inserção, perguntando: � se o desbalanceamento ocorresse devido a uma inserção,
que nó teria sido inserido para causar tal desequilíbrio?
� Identificado o nó, simula-se sua inserção e faz-se a rotação necessária
![Page 36: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/36.jpg)
PAA-DCC-UFAM
Remoção
Retirando o 5 resulta uma árvore desbalanceada no nó 10
Uma rotação simples à esquerda resolve o problemaQue nó inserido teria causado esse desequilíbrio? o 30
(+2)
![Page 37: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/37.jpg)
PAA-DCC-UFAM
Remoção
Retirando o 12 desbalanceia a raiz
Podemos supor que a inserção recente foi o 8
Uma rotação dupla à esquerda corrige o problema
![Page 38: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/38.jpg)
PAA-DCC-UFAM
Remoção
A retirada da folha 2 desbalanceia a raiz 6
Solução: escolhe-se arbitrariamente um desses dois nós, despreza-seo outro (mantendo-o na árvore, obviamente), e simula-se a sua inserção
Escolhemos o 12, que exige uma operação mais simples: rotação simples à esquerda
Essa configuração jamais pode vir de uma seqüência de inserções, pois, se ela fosse 8, 12 ou 12, 8, a primeira dessas inclusões já provocaria rotação
A->dir = B->esq;
B->esq = A;
![Page 39: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/39.jpg)
PAA-DCC-UFAM
Remoção
Infelizmente, há situações mais complexas, onde o próprio processo debalanceamento devido a retirada de um nó de uma subárvore, pode provocar um novo desequilíbrio na árvore
A solução será reaplicar o método para a árvore que desbalanceou. E novo desequilíbrio pode ser provocado mais acima, exigindo novo balanceamento.E assim por diante, até que toda a árvore volte a ser uma AVL
![Page 40: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/40.jpg)
PAA-DCC-UFAM
Remoção
Isso causará o desequilíbrio da subárvore cuja raiz é 70; aplicando nossométodo para esta subárvore apenas, simulamos o ingresso do 90, fazendouma rotação simples à esquerda entre 70 e 80, o que resulta na árvoreabaixo:
Esta árvore é AVL?
![Page 41: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/41.jpg)
PAA-DCC-UFAM
Remoção
A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar ométodo para o 60. Considerando que, neste caso, tanto faz escolhermoso 42, o 52 ou o 56 para ser o nó de inserção simulada, a rotação exigida é a dupla à esquerda (60-40), o resultado é a árvore abaixo que, finalmente, é uma AVL: Aux = B->dir;
// rotação simples à esquerda (B – Aux)
B->dir = Aux->esq;
Aux->esq = B;
// rotação simples à direita (A – Aux)
A->esq = Aux->dir;
Aux->dir = A;
A
B
AUX
![Page 42: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/42.jpg)
PAA-DCC-UFAM
Remoção
A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar ométodo para o 60. Considerando que, neste caso, tanto faz escolhermoso 42, o 52 ou o 56 para ser o nó de inserção simulada, a rotação exigida é a dupla à esquerda (60-40), o resultado é a árvore abaixo que, finalmente, é uma AVL:
![Page 43: Árvores AVL (Adelson-Velskii and Landis)Remoção A árvore não é AVL, pois |FB(60)|>1. Temos que reaplicar o método para o 60 . Considerando que, neste caso, tanto faz escolhermos](https://reader036.vdocuments.site/reader036/viewer/2022081620/611b6572d8e430140361e730/html5/thumbnails/43.jpg)
PAA-DCC-UFAM
Remoção
Isso mostra porque a remoção é mais complicadaque a inserção. Enquanto nesta operação, no máximo uma rotação
(simples ou dupla) servirá para manter a árvore balanceada, na remoção de um único nó, mais de uma rotação poderá ser necessária