algoritmos e estrutura de dados · Árvoresavl 1....
TRANSCRIPT
![Page 1: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/1.jpg)
Algoritmos e Estrutura de Dados
Fabrício Olivetti de França
02 de Fevereiro de 2019
![Page 2: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/2.jpg)
Topics
1. Árvores Balanceadas
1
![Page 3: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/3.jpg)
Árvores Balanceadas
![Page 4: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/4.jpg)
Árvores Binárias Desbalanceadas
Vamos adicionar os elementos 1, 2, 3, 4, 5, 6, 7 nessa ordem em umaárvore binária.
2
![Page 5: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/5.jpg)
Árvores Binárias Desbalanceadas
1
2
3
4
5
6
7
3
![Page 6: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/6.jpg)
Árvores Binárias Desbalanceadas
A busca nessa árvore terá o mesmo custo assintótico que a buscasequencial em uma lista linear.
4
![Page 7: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/7.jpg)
Árvores Binárias Desbalanceadas
Da mesma forma, vamos adicionar os elementos na ordem reversa!
5
![Page 8: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/8.jpg)
Árvores Binárias Desbalanceadas
7
6
5
4
3
2
1
6
![Page 9: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/9.jpg)
Árvores Binárias Desbalanceadas
Finalmente, adicionem na ordem 7, 4, 1, 3, 2, 5, 6.
7
![Page 10: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/10.jpg)
Árvores Binárias Desbalanceadas
7
4
1
3
2
5
6
8
![Page 11: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/11.jpg)
Árvores Binárias Desbalanceadas
Um pouco melhor, mas ainda distante do que gostaríamos!
9
![Page 12: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/12.jpg)
Árvores Binárias Desbalanceadas
As árvores binárias de busca possuem casos degenerados com alturaigual a n − 1.
Nesses casos, as operações tem complexidade O(n) no pior caso.
10
![Page 13: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/13.jpg)
Árvores Binárias Desbalanceadas
Uma árvore binária ótima é aquela que minimiza sua altura, ou seja,⌊log n+ 1⌋.
11
![Page 14: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/14.jpg)
Árvores Balanceadas
Uma árvore balanceada é uma árvore que automaticamente ajusta adisposição de seus nós para manter uma altura assintótica deO(log n).
12
![Page 15: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/15.jpg)
Exercício
A seguinte árvore está balanceada?
4
2
1 3
6
5 7
13
![Page 16: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/16.jpg)
Exercício
A seguinte árvore está balanceada?
1
2
3
4
5
6
14
![Page 17: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/17.jpg)
Exercício
A seguinte árvore está balanceada?
4
2
1 3
5
15
![Page 18: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/18.jpg)
Árvores Balanceadas
• Árvores AVL (Adelson-Velskii e Landis).• Árvores Rubro-Negra.• Árvores Splay.• Árvores-B.
16
![Page 19: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/19.jpg)
Árvores AVL
Árvore Balanceada dinâmica (se torna balanceada no momento dainserção/remoção).
17
![Page 20: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/20.jpg)
Árvores AVL
1. Condição de balanceamento é de que a altura das sub-árvoresde cada nó pode diferir em, no máximo, 1 unidade.
2. Toda sub-árvore é uma árvore AVL.
18
![Page 21: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/21.jpg)
Exercício
Essa é uma árvore AVL?
5
2
1 4
3
8
7
19
![Page 22: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/22.jpg)
Exercício
Essa é uma árvore AVL?
7
2
1 4
3 5
8
20
![Page 23: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/23.jpg)
Altura da AVL
Assumindo n(h) como o número mínimo de nós internos em umaárvore AVL de altura h.
21
![Page 24: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/24.jpg)
Altura da AVL
Temos que n(0) = 1, n(1) = 2
22
![Page 25: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/25.jpg)
Altura da AVL
Para h > 1 temos o nós raíz acrescido dos nós da árvore com alturah − 1 e h − 2 (estamos verificando o mínimo de nós).
n(h) = 1+ n(h − 1) + n(h − 2)
23
![Page 26: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/26.jpg)
Altura da AVL
Sabemos que n(h − 1) > n(h − 2) e, portanto, n(h) > 2n(h − 2),com isso temos que:
n(h) > 2n(h − 2) > 4n(h − 4) > 8n(h − 6) > . . . > 2in(h − 2i)
24
![Page 27: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/27.jpg)
Altura da AVL
Fazendo 2i = h temos:
n(h) > 2h/2n(0) = 2h/2
25
![Page 28: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/28.jpg)
Altura da AVL
Resolvendo temos:
h < 2 log n(h) = O(logn)
26
![Page 29: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/29.jpg)
Struct da árvore AVL
Vamos alterar um pouco nossa estrutura de árvore para conterinformação da altura do nó:
“‘C typedef struct tree tree;
struct tree { TREE_TYPE x; int height; struct tree * left; struct tree *right; };
27
![Page 30: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/30.jpg)
Inserção na AVL
A inserção ocorre de forma similar a árvore binária de busca:
tree * insert (tree * t, tree * node) {
if (t==NULL) return node;if (node->x < t->x)
t->left = insert(t->left , node);else if (node->x > t->x)
t->right = insert(t->right, node);t->height = MAX( height(t->left), height(t->right) )
+ 1;
return t;}
28
![Page 31: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/31.jpg)
Inserção na AVL
O rebalanceamento ocorre logo após uma chamada recursiva deinsert, levando a 4 casos (na verdade dois casos, e os outros doissimétricos):
1. Esquerda-esquerda: o nó foi inserido a esquerda do filhoesquerdo do nó atual.
2. Direita-direita: o nó foi inserido a direita do filho direito do nóatual.
3. Esquerda-direita: o nó foi inserido a direita do filho esquerdodo nó atual.
4. Direita-esquerda: o nó foi inserido a esquerda do filho direitodo nó atual.
29
![Page 32: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/32.jpg)
Esquerda-esquerda
Basta fazer uma rotação para a direita utilizando o filho da esquerdacomo pivô:
Figura 1: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a 30
![Page 33: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/33.jpg)
Esquerda-esquerda
Basta fazer uma rotação para a direita utilizando o filho da esquerdacomo pivô:
Figura 2: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a 31
![Page 34: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/34.jpg)
Direita-direita
Basta fazer uma rotação para a esquerda utilizando o filho da direitacomo pivô:
Figura 3: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a 32
![Page 35: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/35.jpg)
Direita-direita
Basta fazer uma rotação para a esquerda utilizando o filho da direitacomo pivô:
Figura 4: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a 33
![Page 36: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/36.jpg)
Esquerda-direita
Figura 5: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
34
![Page 37: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/37.jpg)
Esquerda-direita
Primeiro fazemos uma rotação para a esquerda:
Figura 6: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
35
![Page 38: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/38.jpg)
Esquerda-direita
Em seguida uma rotação para a direita:
Figura 7: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
36
![Page 39: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/39.jpg)
Direita-esquerda
Figura 8: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
37
![Page 40: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/40.jpg)
Direita-esquerda
Primeiro fazemos uma rotação para a direita:
Figura 9: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
38
![Page 41: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/41.jpg)
Direita-esquerda
Em seguida uma rotação para a esquerda:
Figura 10: FONTE:https://medium.com/@randerson112358/avl-trees-a7b4f1fa2d1a
39
![Page 42: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/42.jpg)
Inserção na AVL
Dessa forma temos que modificar a inserção para realizar asrotações necessárias.
40
![Page 43: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/43.jpg)
Inserção na AVL
tree * insert (tree * t, tree * node) {
if (t==NULL) return node;
if (node->x < t->x){t->left = insert(t->left , node);if (height(t->left) - height(t->right) == 2){
if (node->x < t->left->x) t = left_left(t);else t = left_right(t);
}}
41
![Page 44: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/44.jpg)
Inserção na AVL
else if (node->x > t->x) {t->right = insert(t->right, node);if (height(t->right) - height(t->left) == 2){
if (node->x > t->right->x) t = right_right(t);else t = right_left(t);
}}
t->height = calc_height(t);
return t;}
42
![Page 45: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/45.jpg)
Rotação para a Direita
tree * left_left( tree * root ) {tree * pivot = root->left;root->left = pivot->right;pivot->right = root;
root->height = calc_height(root);pivot->height = calc_height(pivot);
return pivot;}
43
![Page 46: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/46.jpg)
Rotação para a Esquerda
tree * right_right( tree * root ) {tree * pivot = root->right;root->right = pivot->left;pivot->left = root;
root->height = calc_height(root);pivot->height = calc_height(pivot);
return pivot;}
44
![Page 47: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/47.jpg)
Rotação Esquerda-Direita
tree * left_right( tree * t ) {t->left = right_right( t->left );return left_left( t );
}
45
![Page 48: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/48.jpg)
Rotação Direita-Esquerda
tree * right_left( tree * t ) {t->right = left_left( t->right );return right_right( t );
}
46
![Page 49: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/49.jpg)
Passo a passo
Vamos adicionar nós em uma AVL na ordem 7, 4, 1, 3, 2, 5, 6.
47
![Page 50: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/50.jpg)
Passo a passo
(7,0)
48
![Page 51: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/51.jpg)
Passo a passo
(7,1)
(4,0)
49
![Page 52: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/52.jpg)
Passo a passo
(7,2)
(4,1)
(1,0)
50
![Page 53: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/53.jpg)
Passo a passo
(7,2)
(4,1)
(1,0)
51
![Page 54: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/54.jpg)
Passo a passo
Rotação para direita:
(4,1)
(1,0) (7,0)
52
![Page 55: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/55.jpg)
Passo a passo
(4,2)
(1,1)
(3,0)
(7,0)
53
![Page 56: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/56.jpg)
Passo a passo
(4,3)
(1,2)
(3,1)
(2,0)
(7,0)
54
![Page 57: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/57.jpg)
Passo a passo
Rotaciona filho direita para direita:
(4,3)
(1,2)
(2,1)
(3,0)
(7,0)
55
![Page 58: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/58.jpg)
Passo a passo
Rotaciona para esquerda:
(4,2)
(2,1)
(1,0) (3,0)
(7,0)
56
![Page 59: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/59.jpg)
Passo a passo
(4,2)
(2,1)
(1,0) (3,0)
(7,1)
(5,0)
57
![Page 60: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/60.jpg)
Passo a passo
(4,3)
(2,1)
(1,0) (3,0)
(7,2)
(5,1)
(6,0)
58
![Page 61: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/61.jpg)
Passo a passo
Rotaciona filho da esquerda para esquerda:
(4,3)
(2,1)
(1,0) (3,0)
(7,2)
(6,1)
(5,0)
59
![Page 62: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/62.jpg)
Passo a passo
Rotaciona para direita:
(4,2)
(2,1)
(1,0) (3,0)
(6,1)
(5,0) (7,0)
60
![Page 63: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/63.jpg)
Passo a passo
Árvore de 7 nós com altura 2.
(4,2)
(2,1)
(1,0) (3,0)
(6,1)
(5,0) (7,0)
61
![Page 64: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/64.jpg)
Vantagens da AVL
• Busca é sempre O(log n) pois a árvore está sempre balanceada.• Inserções e Remoções são sempre O(log n).• O balanceamento adiciona um fator constante nos custos dasoperações.
62
![Page 65: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/65.jpg)
Desvantagens da AVL
• Operações com custo assintótico baixo, mas ainda assim quecustam tempo computacional.
• O fator constante da remoção pode ser grande demais.
63
![Page 66: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/66.jpg)
Outras árvores balanceadas
• Árvore Rubro-Negra: necessita apenas uma rotação poroperação, mas não tão balanceada do que a AVL.
• Árvores-B: geralmente utilizada para grandes quantidades dedados ou quando esses residem em disco.
• Splay: atualiza o balanceamento da árvore durante o acesso aoelemento, operações amortizadas O(log n).
64
![Page 67: Algoritmos e Estrutura de Dados · ÁrvoresAVL 1. Condiçãodebalanceamentoédequeaalturadassub-árvores decadanópodediferirem,nomáximo,1unidade. Exercício EssaéumaárvoreAVL?](https://reader033.vdocuments.net/reader033/viewer/2022060502/5f1c127c53d73f78c922f52b/html5/thumbnails/67.jpg)
Próxima Aula
Aprenderemos sobre algoritmos de ordenação para estruturaslineares.
65