1 de outubro de 2015 1 Árvores de busca e Árvores avl parte 1 katia guimarães
Post on 07-Apr-2016
214 Views
Preview:
TRANSCRIPT
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
top related