rvores de Busca e rvores AVL Parte 1
Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães 27 February 2021 1
Árvore de Busca Binária Árvores binárias onde os elementos são organizados de forma que: • 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. katia@cin. ufpe. br 23/janeiro/2001 2
Árvore de Busca Binária Árvore binária onde os elementos são organizados de forma que: x y<x katia@cin. ufpe. br z>x 23/janeiro/2001 3
Árvore de Busca Binária Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53. 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 53 23/janeiro/2001 88 71 85 96 4
Árvore de Busca Binária Estrutura de dados dinâmica, com recuperação em tempo logarítmico. 1 2 3 4 katia@cin. ufpe. br 23/janeiro/2001 5
Inserção em Árvores de Busca Ocorre sempre em uma folha. 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ó} katia@cin. ufpe. br 23/janeiro/2001 6
Árvore de Busca Binária Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53. 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 53 23/janeiro/2001 88 71 85 96 7
Remoção em Árvore de Busca Nem sempre ocorre em uma folha. Procedimento Remove (raiz, x) End. Nó Busca (x); Se ¬End. Nó então relate insucesso katia@cin. ufpe. br 23/janeiro/2001 8
Remoção em Árvore de Busca Exemplo: Remove (raiz, 60) raiz 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 53 23/janeiro/2001 88 71 85 96 9
Remoção em Árvores de Busca Nem sempre ocorre em uma folha. Procedimento Remove (raiz, x) End. Nó Busca (x); Se ¬End. Nó então relate insucesso senão se End. Nó é folha (¬esq AND ¬dir ) então apague apontador pai; katia@cin. ufpe. br 23/janeiro/2001 10
Remoção em Árvore de Busca Exemplo: Remove (raiz, 53) raiz 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 53 23/janeiro/2001 88 71 85 96 11
Remoção em Árvore de Busca Exemplo: Remove (raiz, 53) raiz 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 23/janeiro/2001 88 71 85 96 12
Remoção em Árvores de Busca Procedimento Remove (raiz, x) End. Nó Busca (x); Se ¬End. Nó então relate insucesso senão se End. Nó é folha (¬esq AND ¬dir ) então apague apontador pai; senão se ¬esq OR ¬dir então filho x katia@cin. ufpe. br faça pai de x apontar para 23/janeiro/2001 13
Remoção em Árvore de Busca Exemplo: Remove (raiz, 58) raiz 50 20 79 8 4 39 15 26 katia@cin. ufpe. br 58 42 23/janeiro/2001 88 71 85 96 14
Remoção em Árvore de Busca Exemplo: Remove (raiz, 58) 50 raiz 20 79 8 4 39 15 26 katia@cin. ufpe. br 88 42 23/janeiro/2001 71 85 96 15
Remoção em Árvores de Busca Procedimento Remove (raiz, x) End. Nó Busca (x); Se ¬End. Nó então relate insucesso senão se End. Nó é folha (¬esq AND ¬dir ) então apague apontador pai; senão se ¬esq OR ¬dir então filho x sucessor katia@cin. ufpe. br faça pai de x apontar para senão substitua x pelo seu 23/janeiro/2001 16
Remoção em Árvore de Busca Exemplo: Remove (raiz, 20) 50 Onde está o sucessor de 20? 20 8 4 raiz 79 39 15 26 katia@cin. ufpe. br 88 42 23/janeiro/2001 71 85 96 17
Remoção em Árvore de Busca Onde está o sucessor de um elemento cujo nó tem filho à direita? 50 20 Um passo à direita. 8 4 39 15 raiz 26 katia@cin. ufpe. br Tantos passos à esquerda quantos sejam necessários. 42 Note que o nó deste elemento não tem filho à esquerda. 23/janeiro/2001 18
Remoção em Árvore de Busca Exemplo: Remove (raiz, 20) 50 raiz 26 8 4 O pai do sucessor apontará para o seu filho à direita do sucessor. 39 15 katia@cin. ufpe. br 42 23/janeiro/2001 19
Possível Problema Exemplo: 50, 20, 39, 42, 40. . . 50 20 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. 39 42 katia@cin. ufpe. br 23/janeiro/2001 20
Solução Procurar manter todas as folhas mais ou menos na mesma altura. PROPRIEDADE AVL: Para todo nó | altura(dir) - altura(esq) | < 2 katia@cin. ufpe. br 23/janeiro/2001 21
Possível Problema Exemplo: 50, 20, 10, . . . 50 20 10 Após a inserção do elemento 10, a árvore binária perde a propriedade AVL. SOLUÇÃO: Rotação. katia@cin. ufpe. br 23/janeiro/2001 22
Rotação Simples à Direita Inserção à esquerda de árvore desbalanceada à esquerda (bal = -1) 50 20 20 10 50 10 Promover o elemento do meio através de um giro no sentido horário. katia@cin. ufpe. br 23/janeiro/2001 23
Rotação Simples à Esquerda Inserção à direita de árvore desbalanceada à direita (bal = +1) 10 20 20 10 50 50 Promover o elemento do meio através de um giro no sentido anti-horário. katia@cin. ufpe. br 23/janeiro/2001 24
Rotação Simples à Esquerda Inserção à direita de árvore desbalanceada à direita (bal = +1) Nó crítico (+1) 70 50 30 70 60 50 30 90 90 60 95 95 katia@cin. ufpe. br 23/janeiro/2001 25
Rotação Dupla Inserção à direita de árvore desbalanceada à esquerda (bal = -1) 50 30 20 20 50 30 Promover o elemento que desbalanceia tanto à esquerda quanto à direita. katia@cin. ufpe. br 23/janeiro/2001 26
Rotação Dupla Inserção à direita de árvore desbalanceada à direita (bal = +1) Nó crítico (+1) 60 50 30 70 50 90 60 30 70 65 90 65 katia@cin. ufpe. br 23/janeiro/2001 27
- Slides: 27