1 de outubro de Á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/ Árvore de Busca Binária 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/ Árvore de Busca Binária y < xz > x x
Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, /janeiro/ Árvore de Busca Binária
Estrutura de dados dinâmica, com recuperação em tempo logarítmico. 23/janeiro/ Árvore de Busca Binária
Ocorre sempre em uma folha. 23/janeiro/ Inserção em Árvores de Busca 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, /janeiro/ Árvore de Busca Binária
Nem sempre ocorre em uma folha. 23/janeiro/ Remoção em Árvore de Busca Procedimento Remove (raiz, x) EndNó Busca ( x ); Se ¬ EndNó então relate insucesso
Exemplo: Remove (raiz, 60) 23/janeiro/ Remoção em Árvore de Busca raiz
Nem sempre ocorre em uma folha. 23/janeiro/ Remoção em Árvores de Busca 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/ Remoção em Árvore de Busca raiz
Exemplo: Remove (raiz, 53) 23/janeiro/ Remoção em Árvore de Busca raiz
23/janeiro/ Remoção em Árvores de Busca 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/ Remoção em Árvore de Busca raiz
Exemplo: Remove (raiz, 58) 23/janeiro/ Remoção em Árvore de Busca raiz
23/janeiro/ Remoção em Árvores de Busca 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/ Remoção em Árvore de Busca raiz Onde está o sucessor de 20?
Onde está o sucessor de um elemento cujo nó tem filho à direita? 23/janeiro/ Remoção em Árvore de Busca 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/ Remoção em Árvore de Busca raiz O pai do sucessor apontará para o seu filho à direita do sucessor.
Exemplo: 50, 20, 39, 42, /janeiro/ Possível Problema 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/ Solução PROPRIEDADE AVL: Para todo nó | altura(dir) - altura(esq) | < 2
Exemplo: 50, 20, 10,... 23/janeiro/ Possível Problema 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/ Rotação Simples à Direita Promover o elemento do meio através de um giro no sentido horário
Inserção à direita de árvore desbalanceada à direita (bal = +1) 23/janeiro/ Rotação Simples à Esquerda Promover o elemento do meio através de um giro no sentido anti-horário
Inserção à direita de árvore desbalanceada à direita (bal = +1) 23/janeiro/ Rotação Simples à Esquerda Nó crítico (+1)
Inserção à direita de árvore desbalanceada à esquerda (bal = -1) 23/janeiro/ Rotação Dupla Promover o elemento que desbalanceia tanto à esquerda quanto à direita
Inserção à direita de árvore desbalanceada à direita (bal = +1) 23/janeiro/ Rotação Dupla Nó crítico (+1)