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

Post on 07-Apr-2016

215 views 0 download

Transcript of 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

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

23/janeiro/2001 2

Árvore de Busca Binária

katia@cin.ufpe.br

• 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.

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

23/janeiro/2001 3

Árvore de Busca Binária

katia@cin.ufpe.br

y < x z > x

x

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

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

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

23/janeiro/2001 5

Árvore de Busca Binária

katia@cin.ufpe.br

1

2

3

4

Ocorre sempre em uma folha.

23/janeiro/2001 6

Inserção em Árvores de Busca

katia@cin.ufpe.br

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ó}

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

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

Nem sempre ocorre em uma folha.

23/janeiro/2001 8

Remoção em Árvore de Busca

katia@cin.ufpe.br

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

Exemplo: Remove (raiz, 60)

23/janeiro/2001 9

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Nem sempre ocorre em uma folha.

23/janeiro/2001 10

Remoção em Árvores de Busca

katia@cin.ufpe.br

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;

Exemplo: Remove (raiz, 53)

23/janeiro/2001 11

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Exemplo: Remove (raiz, 53)

23/janeiro/2001 12

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

23/janeiro/2001 13

Remoção em Árvores de Busca

katia@cin.ufpe.br

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

Exemplo: Remove (raiz, 58)

23/janeiro/2001 14

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

Exemplo: Remove (raiz, 58)

23/janeiro/2001 15

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

23/janeiro/2001 16

Remoção em Árvores de Busca

katia@cin.ufpe.br

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

Exemplo: Remove (raiz, 20)

23/janeiro/2001 17

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

Onde está o sucessor de 20?

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

23/janeiro/2001 18

Remoção em Árvore de Busca

katia@cin.ufpe.br

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.

Exemplo: Remove (raiz, 20)

23/janeiro/2001 19

Remoção em Árvore de Busca

katia@cin.ufpe.br

50

26

8

4 15

39

42

raiz

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

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

23/janeiro/2001 20

Possível Problema

katia@cin.ufpe.br

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.

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

23/janeiro/2001 21

Solução

katia@cin.ufpe.br

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

Exemplo: 50, 20, 10, ...

23/janeiro/2001 22

Possível Problema

katia@cin.ufpe.br

50

20

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

SOLUÇÃO: Rotação.

10

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

23/janeiro/2001 23

Rotação Simples à Direita

katia@cin.ufpe.br

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

50

20

10

20

10 50

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

23/janeiro/2001 24

Rotação Simples à Esquerda

katia@cin.ufpe.br

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

50

20

10

10

20

50

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

23/janeiro/2001 25

Rotação Simples à Esquerda

katia@cin.ufpe.br

Nó crítico (+1)

60

30

50

90

70

95

90

70

9530

50

60

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

23/janeiro/2001 26

Rotação Dupla

katia@cin.ufpe.br

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

50

20

30

30

20 50

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

23/janeiro/2001 27

Rotação Dupla

katia@cin.ufpe.br

Nó crítico (+1)

60

30

50

90

70

65

60

30

50

90

70

65