Árvores binárias AVL -...

71
SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Árvores binárias AVL

Transcript of Árvores binárias AVL -...

Page 1: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

SCC-202 – Algoritmos e Estruturas de

Dados I

Lucas Antiqueira

Árvores binárias AVL

Page 2: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

2

Árvores binárias de busca (ABB)

Excelentes para busca O(log2 n)

Sabe-se que

Lista encadeada é Eficiente para inserção e remoção dinâmica de

elementos, mas ineficiente para busca

Lista sequencial (ordenada) é Eficiente para busca, mas ineficiente para inserção e

remoção de elementos

mas... ABBs: solução eficiente para inserção, remoção e busca

Page 3: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

3

ABB

Contra-exemplo

Inserção dos elementos na ordem em que

aparecem

A, B, C, D, E, ..., Z

1000, 999, 998, ..., 1

Page 4: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

4

ABB

O desbalanceamento da árvore pode tornar a

busca tão ineficiente quanto a busca

seqüencial (no pior caso)

O(N)

Solução:

Balanceamento da árvore

Page 5: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

Uma árvore binária é dita balanceada se, para cada

nó, as alturas de suas duas subárvores diferem de,

no máximo, 1

5

Árvores balanceadas

A

B C

D E

A

B C

F E D

Page 6: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

6

AVL

Árvore binária de busca balanceada

Para cada nó, as alturas das subárvores

diferem em 1, no máximo

Proposta em 1962 pelos matemáticos russos

G.M. Adelson-Velskki e E.M. Landis

Métodos de inserção e remoção de elementos

desenvolvidos de forma que a árvore não fique

desbalanceada

Page 7: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

7

AVL: quem é e quem não é?

(a) (b) (c)

(d)

(e)

Page 8: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

8

AVL: quem é e quem não é?

(a) (b) (c)

(d)

(e)

Page 9: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

9

Pergunta: a árvore abaixo é AVL?

Page 10: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

10

Exercício: onde se pode incluir um nó

para a AVL continuar sendo AVL?

Page 11: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

11

AVL

Como é que se sabe quando é necessário balancear a árvore?

Se a diferença de altura das subárvores deve ser 1, no máximo, então temos que procurar diferenças de alturas maiores do que isso

Possível solução: cada nó pode manter a diferença de altura de suas subárvores

Convencionalmente chamada de fator de balanceamento (FB) do nó

Page 12: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

12

AVL

Fatores de balanceamento (FB’s) dos nós

Altura da subárvore direita menos altura da subárvore esquerda Hd-He

Atualizados sempre que a árvore é alterada (elemento é inserido ou removido)

Quando um fator é 0, 1 ou -1, a árvore está balanceada

Quando um fator se torna 2 ou -2, a árvore está desbalanceada Operações de balanceamento!

Page 13: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

13

AVL: quem é e quem não é

0

0 0

-1

-1 0

0

1

-1 2

0

0

0 1

0 0 0

-2

-1 0

-1 0

0

(a) (b) (c)

(d)

(e)

-1

0

Page 14: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

14

AVL: exemplo de desbalanceamento

-1

-1 0

0

Novo nó

-1

0 0

0 0

0

0 1

0 0

Novo nó

0

-1

1 1

0 1

Novo nó

0

0

0

1 2

0 1

Novo nó

1

0 0

Desbalanceou

Page 15: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

15

AVL

Controle do balanceamento

Altera-se o algoritmo de inserção para

balancear a árvore quando ela se tornar

desbalanceada após uma inserção (nó com

FB 2 ou -2)

Rotações

Se árvore pende para esquerda (FB negativo),

rotaciona-se para a direita

Se árvore pende para direita (FB positivo), rotaciona-

se para a esquerda

2 casos podem acontecer

Page 16: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

16

AVL: primeiro caso

Raiz de uma subárvore com FB -2 e um nó filho com FB -1

ou

Raiz de uma subárvore com FB 2 e um nó filho com FB 1

Os fatores de balanceamento têm sinais iguais: subárvores do nó

raiz e do filho pendem para o mesmo lado

8

4 10

2 6

0 0

0 0

-1

8

4 10

2 6

0

0 1

-1 0

-2

3

inserção

Page 17: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

17

AVL: primeiro caso

8

4 10

2 6

0

0 1

-1 0

-2

3

Rotação do nó pai para a direita

(nó com FB=2) 8

3 10 6

4

2

0 0 0

1 0

0

Árvore balanceada

8 desce 4 sobe 6 é realocado

Pendendo para a esquerda

Page 18: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

18

AVL: primeiro caso

8

4 10

2 6

0

0 1

-1 0

-2

3

Rotação do nó pai para a direita

(nó com FB=2) 8

3 10 6

4

2

0 0 0

1 0

0

Árvore balanceada

8 desce 4 sobe 6 é realocado

Pendendo para a esquerda

Rotação simples DD

(Direita-Direita)

Page 19: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

19

AVL: primeiro caso

Quando subárvores do pai e filho pendem

para um mesmo lado

Rotação simples para o lado oposto

EE (Esquerda-Esquerda) ou DD (Direita-Direita)

Às vezes, é necessário realocar algum

elemento, pois ele perde seu lugar na árvore

Page 20: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

20

AVL: segundo caso

Raiz de uma subárvore com FB -2 e um nó filho com FB 1

ou

Raiz de uma subárvore com FB 2 e um nó filho com FB -1

Os fatores de balanceamento têm sinais opostos: subárvore do nó

raiz pende para um lado e subárvore do nó filho pende para o

outro

8

4 10

2 6

0 0

0 0

-1

8

4 10

2 6

0

-1 0

1 0

-2

inserção

5

Page 21: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

21

AVL: segundo caso

8

4 10

2 6

5 0

-1 0

1 0

-2

Rotação do nó filho para a esquerda (nó com FB=1)

Rotação do nó pai para a direita

(nó com FB=-2)

8

5 10 2

6

4

0 0 0

0 1

0

Árvore balanceada

8

5

10

2

6

4

Page 22: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

22

AVL: segundo caso

8

4 10

2 6

5 0

-1 0

1 0

-2

Rotação do nó filho para a esquerda (nó com FB=1)

Rotação do nó pai para a direita

(nó com FB=-2)

8

5 10 2

6

4

0 0 0

0 1

0

Árvore balanceada

8

5

10

2

6

4 Rotação dupla ED

(Esquerda-Direita)

Page 23: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

23

AVL: segundo caso

Quando subárvores do pai e filho pendem para lados opostos

Rotação dupla

Primeiro, rotaciona-se o filho para o lado do desbalanceamento do pai

Em seguida, rotaciona-se o pai para o lado oposto do desbalanceamento

ED ou DE (com raciocínio inverso)

Às vezes, é necessário realocar algum elemento, pois ele perde seu lugar na árvore

Page 24: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

24

AVL

Assegura-se o rebalanceamento de todos os

ancestrais de p e, portanto, o

rebalanceamento da árvore toda

Page 25: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

25

AVL

Novo algoritmo de inserção

A cada inserção, verifica-se o balanceamento

da árvore

Se necessário, fazem-se as rotações de acordo

com o caso (sinais iguais ou não)

Armazena-se uma variável de balanceamento

em cada nó para indicar o FB

Page 26: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

26

AVL

Declaração

typedef int elem;

typedef struct no {

elem info;

struct no *esq, *dir;

int FB;

} no;

typedef struct {

no *raiz;

} AVL;

Page 27: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

27

AVL

Exercício

Inserir os elementos 10, 3, 2, 5, 7 e 6 em uma

árvore AVL e balancear quando necessário

Page 28: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

28

AVL

Exercício

Inserir os elementos 1, 2, 3, ..., 10 em uma

árvore AVL e balancear quando necessário

Page 29: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

29

AVL

Os percursos em-ordem da árvore original e

da balanceada permanecem iguais

Exercício: mostre para os exemplos

anteriores

Page 30: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação simples à esquerda

void EE(no **r) {

no *a = *r;

no *b = a->dir;

a->dir = b->esq;

b->esq = a;

a->fb = 0;

b->fb = 0;

*r = b;

}

Page 31: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

Rotação simples à esquerda

http://en.wikipedia.org/wiki/File:Tree_Rebalancing.gif

Page 32: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação simples à direita

void DD(no **r) {

no *b = *r;

no *a = b->esq;

b->esq = a->dir;

a->dir = b;

a->fb = 0;

b->fb = 0;

*r = a;

}

Page 33: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

Rotação simples à direita

http://en.wikipedia.org/wiki/File:Tree_Rebalancing.gif

Page 34: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação dupla esquerda-direita

void ED(no **r) {

no *c = *r;

no *a = c->esq;

no *b = a->dir;

c->esq = b->dir;

a->dir = b->esq;

b->esq = a;

b->dir = c;

switch (b->fb) {

case -1:

a->fb = 0;

c->fb = 1;

break;

Continua

Page 35: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação dupla esquerda-direita

case 0:

a->fb = 0;

c->fb = 0;

break;

case 1:

a->fb = -1;

c->fb = 0;

break;

}

b->fb = 0;

*r = b;

}

Page 36: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

Rotação dupla esquerda-direita

http://en.wikipedia.org/wiki/File:Tree_Rebalancing.gif

Page 37: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação dupla direita-esquerda

void DE(no **r) {

no *a = *r;

no *c = a->dir;

no *b = c->esq;

c->esq = b->dir;

a->dir = b->esq;

b->esq = a;

b->dir = c;

switch (b->fb) {

case -1:

a->fb = 0;

c->fb = 1;

break;

Continua

Page 38: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Rotação dupla direita-esquerda

case 0:

a->fb = 0;

c->fb = 0;

break;

case 1:

a->fb = -1;

c->fb = 0;

break;

}

b->fb = 0;

*r = b;

}

Page 39: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

Rotação dupla direita-esquerda

http://en.wikipedia.org/wiki/File:Tree_Rebalancing.gif

Page 40: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

int aux_insere(no** p, int x, int *cresceu) {

if (*p == NULL) {

*p = (no*) malloc(sizeof(no));

(*p)->info = x;

(*p)->fb = 0;

(*p)->esq = NULL;

(*p)->dir = NULL;

*cresceu = 1;

return 1;

} else if (x == (*p)->info)

return 0;

Continua

Page 41: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

else if (x < (*p)->info) {

if (aux_insere(&(*p)->esq, x, cresceu)) {

if (*cresceu) {

switch ((*p)->fb) {

case -1:

if ((*p)->esq->fb == -1)

DD(p);

else

ED(p);

*cresceu = 0;

break;

Continua

Page 42: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

case 0:

(*p)->fb = -1;

*cresceu = 1;

break;

case 1:

(*p)->fb = 0;

*cresceu = 0;

break;

}

}

return 1;

} else

return 0;

Continua

Page 43: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

} else {

if (aux_insere(&(*p)->dir, x, cresceu)) {

if (*cresceu) {

switch ((*p)->fb) {

case -1:

(*p)->fb = 0;

*cresceu = 0;

break;

case 0:

(*p)->fb = 1;

*cresceu = 1;

break;

Continua

Page 44: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

case 1:

if ((*p)->dir->fb == 1)

EE(p);

else

DE(p);

*cresceu = 0;

break;

}

}

return 1;

} else

return 0;

}

}

Page 45: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

AVL

Inserção

int inserir(no **p, int x) {

int cresceu;

return aux_insere(p, x, &cresceu);

}

Page 46: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

46

AVL

100

50 500

20 79 300 790

10 35 200 301 609 821

199 265 803 900

Exercício: teste a rotina de inserção inserindo alguns

elementos na árvore abaixo

Page 47: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

47

AVL

Exercício

Pense no procedimento de remoção de um

elemento da AVL e responda

Quais são os casos de desbalanceamento?

Esboce um método de remoção que balanceie a

árvore se necessário

Page 48: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

48

AVL

Como fazer a remoção de elementos da

AVL?

Page 49: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

49

AVL: remoção

Exemplos

23

15 29

12

R

Como balancear?

remoção de 29

Page 50: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

50

AVL: remoção

Exemplos

23

15 29

12

R

remoção de 29 = inserção de 12

Rotação simples DD

Page 51: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

51

AVL: remoção

Exemplos

23

15 25

12 19

R

29

10

Como balancear?

remoção de 29

Page 52: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

52

AVL: remoção

Exemplos

23

15 25

12 19

R

29

10

Rotação simples DD

remoção de 29 = inserção de 10

Page 53: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

53

AVL: remoção

Exemplos

23

15 29

12 19

R

Como balancear?

remoção de 29

Page 54: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

54

AVL: remoção

Exemplos

23

15 29

12 19

R

Rotação simples DD

remoção de 29 = inserção de 12 ou19

(desbalanceamento que não aconteceria na inserção)

Page 55: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

55

AVL: remoção

Exemplos

23

15 25

12 19

R

29

10 16

Como balancear?

remoção de 29

Page 56: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

56

AVL: remoção

Exemplos

23

15 25

12 19

R

29

10 16

Rotação simples DD

remoção de 29 = inserção de 10 ou16

(não aconteceria na inserção)

Page 57: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

57

AVL: remoção

Primeiro caso

Rotação simples em R com filho com fator de

balanceamento de mesmo sinal ou zero

Se FB negativo, rotaciona-se para a direita; caso

contrário, para a esquerda

Page 58: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

58

AVL: remoção

Exemplos

23

15 29

R

19

Como balancear?

remoção de 29

Page 59: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

59

AVL: remoção

Exemplos

23

15 29

R

19

Rotação dupla ED

remoção de 29 = inserção de 19

Page 60: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

60

AVL: remoção

Exemplos

23

15 25

12 19

R

16

29

Como balancear?

remoção de 29

Page 61: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

61

AVL: remoção

Exemplos

23

15 25

12 19

R

16

29

Rotação dupla ED

remoção de 29 = inserção de 16

Page 62: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

62

AVL: remoção

Exemplos

23

15 25

12 19

R

29

20

Como balancear?

remoção de 29

Page 63: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

63

AVL: remoção

Exemplos

23

15 25

12 19

R

29

20

Rotação dupla ED

remoção de 29 = inserção de 20

Page 64: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

64

AVL: remoção

Exemplos

23

15 25

12 19

R

29

16 20

Como balancear?

remoção de 29

Page 65: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

65

AVL: remoção

Exemplos

23

15 25

12 19

R

29

16 20

Rotação dupla ED

remoção de 29 = inserção de 16 ou 20

(não aconteceria na inserção)

Page 66: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

66

AVL: remoção

Segundo caso

Rotação dupla quando R e seu filho têm fatores de balanceamento com sinais opostos

Rotaciona-se o filho para o lado do desbalanceamento do pai

Rotaciona-se R para o lado oposto do desbalanceamento

Page 67: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

67

AVL: remoção

Questão: como remover um nó intermediário em vez

de um nó folha?

É necessário balancear?

23

15 25

12 19

R

29

20

Page 68: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

68

AVL: remoção

Questão: como remover um nó intermediário em vez

de um nó folha?

É necessário balancear?

23

15 25

12 19

R

29

16 20

Page 69: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

69

AVL: remoção

Questão: como remover um nó intermediário em vez

de um nó folha?

É necessário balancear?

23

15 25

12 19

R

29

20

Page 70: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

70

AVL: remoção

Exercício

Esquematizar cada caso

Que ponteiros alterar, como atualizar os fatores

de balanceamento?

Esboçar sub-rotina de remoção de elemento

de uma AVL

Page 71: Árvores binárias AVL - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3d/SCC0202-2oSem2011-Lucas-Slides12.pdf · Os fatores de balanceamento têm sinais opostos: subárvore do nó raiz

71

Créditos

Material gentilmente cedido pelo

Prof. Thiago A. S. Pardo