1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

27
28 de junho de 202 2 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães

Transcript of 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Page 1: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

27 de abril de 2023

1

Árvores de Busca e Árvores AVL

Parte 1

Katia Guimarães

Page 2: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Árvores binárias onde os elementos são organizados de forma que:

23/janeiro/2001 2

Árvore de Busca Binária

[email protected]

• Todos os elementos na sub-árvore esquerda de cada nó k têm valor menor ou igual ao valor no nó k.

• Todos os elementos na sub-árvore direita de cada nó k têm valor maior do que o valor no nó k.

Page 3: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Árvore binária onde os elementos são organizados de forma que:

23/janeiro/2001 3

Árvore de Busca Binária

[email protected]

y < x z > x

x

Page 4: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53.

23/janeiro/2001 4

Árvore de Busca Binária

[email protected]

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

Page 5: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Estrutura de dados dinâmica, com recuperação em tempo logarítmico.

23/janeiro/2001 5

Árvore de Busca Binária

[email protected]

1

2

3

4

Page 6: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Ocorre sempre em uma folha.

23/janeiro/2001 6

Inserção em Árvores de Busca

[email protected]

Procedimento Inclui (raiz, x): Se raiz então

se elemento na raiz > x então Inclui (esquerda, x) senão Inclui (direita, x) senão { aloque espaço para um nó;

coloque x neste nó; retorne apontador novo nó}

Page 7: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53.

23/janeiro/2001 7

Árvore de Busca Binária

[email protected]

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

Page 8: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Nem sempre ocorre em uma folha.

23/janeiro/2001 8

Remoção em Árvore de Busca

[email protected]

Procedimento Remove (raiz, x) EndNó Busca (x); Se ¬EndNó então relate insucesso

Page 9: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 60)

23/janeiro/2001 9

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Page 10: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Nem sempre ocorre em uma folha.

23/janeiro/2001 10

Remoção em Árvores de Busca

[email protected]

Procedimento Remove (raiz, x) EndNó Busca (x); Se ¬EndNó então relate insucesso

senão se EndNó é folha (¬esq AND ¬dir ) então apague apontador pai;

Page 11: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 53)

23/janeiro/2001 11

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Page 12: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 53)

23/janeiro/2001 12

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

Page 13: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

23/janeiro/2001 13

Remoção em Árvores de Busca

[email protected]

Procedimento Remove (raiz, x) EndNó Busca (x); Se ¬EndNó então relate insucesso

senão se EndNó é folha (¬esq AND ¬dir ) então apague apontador pai; senão se ¬esq OR ¬dir então faça pai de x apontar

para filho x

Page 14: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 58)

23/janeiro/2001 14

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

Page 15: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 58)

23/janeiro/2001 15

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

Page 16: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

23/janeiro/2001 16

Remoção em Árvores de Busca

[email protected]

Procedimento Remove (raiz, x) EndNó Busca (x); Se ¬EndNó então relate insucesso

senão se EndNó é folha (¬esq AND ¬dir ) então apague apontador pai; senão se ¬esq OR ¬dir então faça pai de x apontar para

filho x senão substitua x pelo

seu sucessor

Page 17: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 20)

23/janeiro/2001 17

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

Onde está o sucessor de 20?

Page 18: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Onde está o sucessor de um elemento cujo nó tem filho à direita?

23/janeiro/2001 18

Remoção em Árvore de Busca

[email protected]

50

20

8

4 15

39

26 42

raiz

Um passo à direita.

Tantos passos à esquerda quantos sejam necessários.

Note que o nó deste elemento não tem filho à esquerda.

Page 19: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: Remove (raiz, 20)

23/janeiro/2001 19

Remoção em Árvore de Busca

[email protected]

50

26

8

4 15

39

42

raiz

O pai do sucessor apontará para o seu filho à direita do sucessor.

Page 20: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 20

Possível Problema

[email protected]

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.

Page 21: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 21

Solução

[email protected]

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

Page 22: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

Exemplo: 50, 20, 10, ...

23/janeiro/2001 22

Possível Problema

[email protected]

50

20

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

SOLUÇÃO: Rotação.

10

Page 23: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 23

Rotação Simples à Direita

[email protected]

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

50

20

10

20

10 50

Page 24: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 24

Rotação Simples à Esquerda

[email protected]

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

50

20

10

10

20

50

Page 25: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 25

Rotação Simples à Esquerda

[email protected]

Nó crítico (+1)

60

30

50

90

70

95

90

70

9530

50

60

Page 26: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 26

Rotação Dupla

[email protected]

Promover o elemento que desbalanceia tanto à esquerda quanto à direita.

50

20

30

30

20 50

Page 27: 1 de outubro de 2015 1 Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.

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

23/janeiro/2001 27

Rotação Dupla

[email protected]

Nó crítico (+1)

60

30

50

90

70

65

60

30

50

90

70

65