Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita...

77
Árvores AVL Árvores AVL SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic [email protected] Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 4 de novembro de 2010

Transcript of Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita...

Page 1: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVL

Árvores AVL

SCC0202 - Algoritmos e Estruturas de Dados I

Prof. Fernando V. Paulovich*Baseado no material do Prof. Gustavo Batista

http://www.icmc.usp.br/[email protected]

Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)

4 de novembro de 2010

Page 2: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 3: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 4: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores Binárias de Busca

Altura de uma árvore binária (AB): igual à profundidade,ou nível máximo, de suas folhasA eficiência da busca em árvore depende do seubalanceamentoAlgoritmos de inserção e remoção em ABB não garantemque a árvore gerada a cada passo seja balanceada

Page 5: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

Árvore AVL: ABB na qual as alturas das duas sub-árvoresde todo nó nunca diferem em mais de 1

Fator de balanceamento de nó: a altura de sua sub-árvoreesquerda menos a altura de sua sub-árvore direita

FB(p) = h(TE(p))− h(TD(p))

Em uma árvore AVL todo nó tem fator de balanceamentoigual a 1, −1 ou 0

Page 6: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

Page 7: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

O problema das árvores AVL e das árvores balanceadas deuma forma geral é como manter a estrutura balanceadaapós operações de inserção e remoçãoAs operações de inserção e remoção sobre ABBs nãogarantem o balanceamento

Page 8: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

As seguintes inserções tornam a árvore desbalanceada

Page 9: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

As seguintes situações podem levar ao desbalaceamentode uma árvore AVL

O nó inserido é descendente esquerdo de um nó quetinha FB = 1 (U1 e U8)O nó inserido é descendente direito de um nó que tinhaFB = −1 (U9 e U12)

Page 10: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

Para manter uma árvore balanceada é necessário aplicaruma transformação na árvore tal que

1 O percurso em-ordem na árvore transformada seja igualao da árvore original (isto é, a árvore transformadacontinua sendo uma ABB)

2 A árvore transformada fique balanceada

Page 11: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLConceitos Introdutórios

Árvores AVL

A transformação que mantém a árvore balanceada échamada de rotaçãoA rotação pode ser feita à esquerda ou à direita,dependendo do desbalanceamento a ser tratadoA rotação deve ser realizada de maneira a respeitar asregras 1 e 2 definidas no slide anteriorDependendo do desbalanceamento a ser tratado, umaúnica rotação pode não ser suficiente

Page 12: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 13: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

Page 14: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

Page 15: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

A rotação direita consiste em subir o nó B para o lugar de A. A desce para sersub-árvore direita de B

Page 16: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

A rotação direita tem formatogeral ilustrado à direitaT1, T2 e T3 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 17: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

A rotação direita tem formatogeral ilustrado à direitaT1, T2 e T3 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 18: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

Page 19: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

Page 20: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Direita

Árvores AVL - Rotação Direita

ExercícioInsira em uma árvore AVL a seqüência de valores:5, 4, 3, 2, 1. Na ordem que os valores foram listados

Page 21: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 22: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

Page 23: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

Page 24: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

Page 25: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

A rotação esquerda temformato geral ilustrado àdireitaT1, T2 e T3 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 26: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

A rotação esquerda temformato geral ilustrado àdireitaT1, T2 e T3 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 27: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

Page 28: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

Page 29: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotação Esquerda

Árvores AVL - Rotação Esquerda

ExercícioInsira em uma árvore AVL a seqüência de valores:1, 2, 3, 4, 5. Na ordem que os valores foram listados

Page 30: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Simples

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 31: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Simples

Rotações Simples

Tanto para a rotação direitaquanto para a rotaçãoesquerda, a sub-árvoreresultante tem como altura amesma altura a sub-árvoreoriginalIsso significa que o fator debalanceamento de nenhum nóacima de A é afetado

Page 32: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Simples

Rotações Simples

Quando se deve utilizar arotação direita ou esquerda?

Quando o fator debalanceamento do nó A épositivo, a rotação édireita. Se for negativo arotação é esquerda

Page 33: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Simples

Rotações Simples

Quando se deve utilizar arotação direita ou esquerda?

Quando o fator debalanceamento do nó A épositivo, a rotação édireita. Se for negativo arotação é esquerda

Page 34: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 35: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Rotações Duplas

Será que as rotações simplessolucionam todos os tipos dedesbalanceamento?

Infelizmente, nãoExistem situações nas quais énecessário uma rotação dupla

Page 36: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Rotações Duplas

Page 37: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Esq./Dir.

A rotação duplaesquerda/direita tem formatogeral ilustrado à direitaT1, T2, T3 e T4 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 38: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Esq./Dir.

Passo 1: rotação esquerda emBA princípio a rotaçãoesquerda parece deixar aárvore ainda maisdesbalanceadaEntretanto...

Page 39: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Esq./Dir.

Passo 2: rotação direita em ARepare que a altura final dasub-árvore é n+ 2Funciona também se o novonó tivesse sido inserido em T3

Page 40: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Esq./Dir.

A rotação dupladireita/esquerda tem formatogeral ilustrado à direitaT1, T2, T3 e T4 podem sersub-árvores de qualquertamanho, inclusive 0A é o nó mais jovem a setornar desbalanceado

Page 41: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Dir./Esq.

Passo 1: rotação direita em BA princípio a rotação direitaparece deixar a árvore aindamais desbalanceadaEntretanto...

Page 42: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLRotações Duplas

Árvores AVL - Rotação Dir./Esq.

Passo 2: rotação esquerda emARepare que a altura final dasub-árvore é n+ 2Funciona também se o novonó tivesse sido inserido em T2

Page 43: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLQual Rotação Usar

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 44: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLQual Rotação Usar

Como decidir qual rotação usar?

Se o sinal do nó A e do nó Bforem iguais então a rotaçãoé simplesSe o fator de balanceamentonó A (nó mais jovem a setornar desbalanceado) forpositivo, então a rotação édireita

Page 45: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLQual Rotação Usar

Como decidir qual rotação usar?

Se o sinal do nó A e do nó Bforem iguais então a rotaçãoé simplesSe o fator de balanceamentonó A (nó mais jovem a setornar desbalanceado) fornegativo, então a rotação éesquerda

Page 46: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLQual Rotação Usar

Como decidir qual rotação usar?

Se o sinal do nó A e do nó Bforem diferentes então arotação é duplaSe o fator de balanceamentonó A (nó mais jovem a setornar desbalanceado) forpositivo, então a rotação éesquerda/direita

Page 47: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLQual Rotação Usar

Como decidir qual rotação usar?

Se o sinal do nó A e do nó Bforem diferentes então arotação é duplaSe o fator de balanceamentonó A (nó mais jovem a setornar desbalanceado) fornegativo, então a rotação édireita/esquerda

Page 48: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 49: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Definição de Tipos

1 typedef struct {2 int chave;3 int valor;4 } INFO;56 typedef struct NO {7 INFO info;8 int fb; //fator de balanceamento9 struct NO *pai; //ponteiro para o pai

10 struct NO *fesq; //ponteiro para o filho da esquerda11 struct NO *fdir; //ponteiro para o filho da direita12 } NO;1314 typedef struct {15 NO *raiz;16 } ARVORE_AVL;

Page 50: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Algoritmo - Rotação Direita

1 NO *rot_dir(NO *no) {2 NO *aux = no->fesq;34 if (no->pai) { //verifica se no não é a raiz5 if (no->pai->fesq == no)6 no->pai->fesq = aux;7 else8 no->pai->fdir = aux;9 }

1011 aux->pai = no->pai;12 no->fesq = aux->fdir;13 if (no->fesq) no->fesq->pai = no;14 aux->fdir = no;15 no->pai = aux;1617 return(aux);18 }

Page 51: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Algoritmo - Rotação Esquerda

1 NO *rot_esq(NO *no) {2 NO *aux = no->fdir;34 if (no->pai) { //verifica se no não é a raiz5 if (no->pai->fesq == no)6 no->pai->fesq = aux;7 else8 no->pai->fdir = aux;9 }

1011 aux->pai = no->pai;12 no->fdir = aux->fesq;13 if (no->fdir) no->fdir->pai = no;14 aux->fesq = no;15 no->pai = aux;1617 return(aux);18 }

Page 52: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Algoritmo - Rotação Esq./Dir.

1 NO *rot_esq_dir(NO *no) {2 rot_esq(no->fesq);3 return(rot_dir(no));4 }

Page 53: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLImplementação

Algoritmo - Rotação Dir./Esq.

1 NO *rot_dir_esq(NO *no) {2 rot_dir(no->fdir);3 return(rot_esq(no));4 }

Page 54: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Sumário

1 Conceitos Introdutórios

2 Rotação Direita

3 Rotação Esquerda

4 Rotações Simples

5 Rotações Duplas

6 Qual Rotação Usar

7 Implementação

8 Inserção em Árvores AVL

Page 55: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Utilizando as rotinas de rotação pode-se definir umalgoritmo de inserção em árvores AVLNessa operação é importante saber

O balanceamento de cada nó da árvoreO nó ancestral mais jovem do nó inserido que pode setornar desbalanceadoA inserção é feita em dois passos: o primeiro é umainserção em ABBs e o segundo é o rebalanceamento, senecessário

Page 56: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Vamos supor que um novo nó será inserido na posiçãomarcada em vermelho

Page 57: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Um ponteiro p marca a posição que se está procurando...

Page 58: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 59: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 60: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 61: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

O balanceamento entre q e p é atualizado...

Page 62: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

A rotação apropriada é realizada, os fatores debalanceamento são atualizados

Page 63: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Vamos supor que um novo nó será inserido na posiçãomarcada em vermelho

Page 64: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Um ponteiro p marca a posição que se está procurando...

Page 65: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 66: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 67: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

E q aponta para o ancestral mais jovem que possuibalanceamento diferente de 0...

Page 68: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

O balanceamento entre q e p é atualizado...

Page 69: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Não há necessidade de ajustar o fator de balanceamentoacima de q (porque?)

Page 70: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

Como não houve desbalanceamento, o algoritmo termina

Page 71: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

1 void inserir_arvore_avl(ARVORE_AVL *arv, INFO info) {2 arv->raiz = inserir_arvore_avl_aux(arv->raiz, info);3 }45 struct NO *inserir_arvore_avl_aux(NO *raiz, INFO info) {6 if (raiz == NULL) {7 raiz = (NO *) malloc(sizeof(NO));8 raiz->fesq = raiz->fdir = raiz->pai = NULL;9 raiz->info = info;

10 raiz->fb = 0;11 } else {12 if (raiz->info.chave > info.chave) { //desce pela esquerda13 raiz->fesq = inserir_arvore_avl_aux(raiz->fesq, info);14 raiz->fesq->pai = raiz;1516 //adicionar as rotações...17 } else { //desce pela direita18 raiz->fdir = inserir_arvore_avl_aux(raiz->fdir, info);19 raiz->fdir->pai = raiz;2021 //adicionar as rotações...22 }23 }2425 return(raiz);26 }

Page 72: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Algoritmo de Inserção

1 void inserir_arvore_avl(ARVORE_AVL *arv, INFO info) {2 int atualiza_fb = 0;3 arv->raiz = inserir_arvore_avl_aux(arv->raiz, info, &atualiza_fb);4 }56 struct NO *inserir_arvore_avl_aux(NO *raiz, INFO info, int *←↩

atualiza_fb) {7 if (raiz == NULL) {8 //...9 *atualiza_fb = 1; //inseriu, atualiza os fbs

10 } else {11 if (raiz->info.chave > info.chave) { //desce pela esquerda12 raiz->fesq = inserir_arvore_avl_aux(raiz->fesq, info, ←↩

atualiza_fb);13 raiz->fesq->pai = raiz;1415 if (*atualiza_fb) {16 //...17 }18 } else { //desce pela direita19 raiz->fdir = inserir_arvore_avl_aux(raiz->fdir, info, ←↩

atualiza_fb);20 raiz->fdir->pai = raiz;2122 if (*atualiza_fb) {23 //...24 }25 }26 }2728 return(raiz);29 }

Page 73: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Remoção em AVLs

Para eliminar um nó de uma árvore AVL, o algoritmo éum pouco mais complicadoEnquanto que a inserção pode requerer no máximo umarotação (simples ou dupla), a remoção pode requerermais de uma rotação

No pior caso, pode-se fazer uma rotação a cada nível daárvoreOu seja, no pior caso O(log n) rotaçõesNa prática, são necessárias apenas 0, 214 rotação poreliminação, em média

Page 74: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Complexidade das AVLs

A altura máxima de uma ABB AVL é 1, 44 log2 n

Dessa forma, uma pesquisa nunca exige mais do que 44%mais comparações que uma ABB totalmente balanceada.

Na prática, para n grande, os tempos de busca são porvolta de log2 n + 0, 25Na média, é necessária uma rotação em 46, 5% dasinserções

Page 75: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Exercícios

Simule a inserção da seguinte seqüência de valores emuma árvore AVL: 10, 7, 20, 15, 17, 25, 30, 5, 1Em cada opção abaixo, insira as chaves na ordemmostrada de forma a construir uma arvore AVL. Sehouver rebalanceamento de nós, mostre qual oprocedimento a fazer

1 a, z, b, y, c, x2 a, z, b, y, c, x, d, w, e, v, f3 a, v, l, t, r, e, i, o, k4 m, te, a, z, g, p

Page 76: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Exercícios

Escreva uma função que retorna a altura da árvore AVL.Qual é a complexidade da operação implementada? Ela émais eficiente que a implementação para ABBs?Implemente o TAD AVL com as operações de inserção ebusca e demais operações auxiliares

Page 77: Árvores AVL - 0.5cmSCC0202 - Algoritmos e Estruturas de ... · Árvores AVL Rotação Direita ÁrvoresAVL-RotaçãoDireita A rotação direita consiste em subir o nó B para o lugar

Árvores AVLInserção em Árvores AVL

Exercícios

Mostre a árvores AVL gerada passo-a-passo pelasinserções das seguintes chaves na ordem fornecida

10, 5, 20, 1, 3, 4, 8, 30, 40, 35, 50, 45, 55, 51, 100