Árvores AVL

23
1 Árvores AVL Rotação Simples e Dupla Katia Guimarães

description

Árvores AVL. Rotação Simples e Dupla Katia Guimarães. 50. 20. 39. 42. Possível Problema. Exemplo: 50, 20, 39, 42, 40. A árvore binária pode degenerar para uma estrutura próxima a uma lista ligada, e o tempo de acesso deixa de ser logarítmico. 40. Solução. - PowerPoint PPT Presentation

Transcript of Árvores AVL

Page 1: Árvores AVL

1

Árvores AVL

Rotação Simples e Dupla

Katia Guimarães

Page 2: Árvores AVL

2

Exemplo: 50, 20, 39, 42, 40 ...

Possível Problema

50

20

39

42

A árvore binária pode degenerar para uma estrutura próxima a uma lista ligada, e o tempo de acesso deixa de ser logarítmico.

40

Page 3: Árvores AVL

3

Solução

Procurar manter todas as folhas mais ou menos na mesma altura.

PROPRIEDADE AVL: Para todo nó | altura(dir) - altura(esq) | < 2

Page 4: Árvores AVL

4

Exemplo: 50, 20, 10, ...50

20

Após a inserção do elemento 10, a árvore binária perde a propriedade AVL.

SOLUÇÃO: Rotação.

10

Possível Problema

Page 5: Árvores AVL

5

Rotação Simples à Direita

Inserção à esquerda de árvore desbalanceada à esquerda (bal = -1)

Promover o elemento do meio através de um giro no sentido horário.

50

20

10

20

10 50

Page 6: Árvores AVL

6

Rotação Simples à Esquerda

Inserção à direita de árvore desbalanceada à direita (bal = +1)

Promover o elemento do meio através de um giro no sentido anti-horário.

50

20

10

10

20

50

Page 7: Árvores AVL

7

Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.

Rotação Simples

raiz

(-1)A

B C

2

4

Page 8: Árvores AVL

8

Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.

Rotação Simples

B

C

1

1

(-1)A

-1 (0)

(0)

(0)

Dir.A

Alt=2Dir.B

Alt=2

Page 9: Árvores AVL

9

Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.

Rotação Simples

B

C

Dir.A

Alt=2

1

1 A 0

0

Dir.B

Alt=2

Page 10: Árvores AVL

10

Inserção à esquerda de nó crítico A com (bal = -1), à esquerda do nó B.

Rotação Simples

raiz

(0)B

A (0) C (1)(1)

4

Page 11: Árvores AVL

11

Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.

Rotação Dupla

raiz

B

C

(-1)A

2

5

Page 12: Árvores AVL

12

Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.

Rotação Dupla

B

C

(-1)A

21

1

-1+1

-2

Page 13: Árvores AVL

13

Inserção à esquerda de nó crítico A com (bal = -1), à direita do nó B.

Rotação Dupla

C

2

B

E

(-1)A

D

Dir.A

Qualquer que seja a posição de inclusão na sub-árvore de C, a árvore terá a propriedade AVL.

E D Dir.AB A

C

1

1

0 1

0

A altura da sub-árvore é igual à da original.

Page 14: Árvores AVL

14

Inserção à direita do nó crítico A com (bal = +1), à esquerda do nó B.

Rotação Dupla

raiz

B

C

(+1)A

2

Page 15: Árvores AVL

15

Inserção à direita do nó crítico A com (bal = +1), à esquerda do nó B.

Rotação Dupla

(+1)A

2

B

C

1

1

-1

-1

+2

Page 16: Árvores AVL

16

Inserção à direita de nó crítico A com (bal = +1), à esquerda do nó B.

Rotação Dupla

A

C

B

E D

E D

B

C

2

Esq.A

Qualquer que seja a posição de inclusãona sub-árvore de C, a árvore terá a propriedade AVL. IMPORTANTE: Os balances de A e de B podem ser –1 e 0, respectivamente.

1

1

A 0 1

0

Esq.A

Page 17: Árvores AVL

17

Inserção à direita de nó crítico A com (bal = +1), à esquerda do nó B.

Rotação Dupla

Os valores dos balances de cada nó são os mesmos, a menos daqueles nos nós A, B e C, que tomam valores dependendo se a inclusão foi à esquerda ou à direita de C.

E D

B

C

1

1

A 0 1

0

Esq.A

Page 18: Árvores AVL

18

Encaminhamento top-down: 1. O processamento se inicia pela raiz.

2. O novo vértice inserido será sempre uma folha. 3. Esta nova folha tem balance = 0, e retorna ao pai a informação (Altura Alterada = V, <próprio endereço>)

Considerações para Implementação Recursiva

Page 19: Árvores AVL

19

Encaminhamento bottom-up: Se um nó pai receber a info: (V, <ender>)

• Calcular novo balance: Se filho à esq, então Bal Bal – 1 senão Bal Bal +1 • Se Bal = 0 então devolver (F, <próprio ender>) Se Bal = +1 ou –1 então devolver (V, <próprio ender>) Se Bal = +2 ou –2 então { rotacionar; devolver (F, <ender. nova raiz>) }

Considerações para Implementação Recursiva

Page 20: Árvores AVL

20

Encaminhamento bottom-up: Se Bal = +1 ou –1 então devolver (V, <próprio ender>)

Considerações para Implementação Recursiva

Page 21: Árvores AVL

21

Encaminhamento bottom-up: Se Bal = 0 então devolver (F, <próprio ender>)

Considerações para Implementação Recursiva

Page 22: Árvores AVL

22

Se Bal = +2 ou –2 então { rotacionar; devolver (F, <ender. nova raiz>) }

Considerações para Implementação Recursiva

C

2

B

E

(-1)A

D

Dir.AE D Dir.A

B A

C

1

1

0 1

0

A altura da sub-árvore é igual à da original.

Page 23: Árvores AVL

23

Encaminhamento bottom-up: Se um nó pai receber a info: (F, <ender>) então devolver (F, <próprio ender>)

Considerações para Implementação Recursiva