Árvores Binária de Busca Disciplina de Algoritmos e Estrutura de Dados III Prof. Marcos Antonio Schreiner 27/03/2015 1 Árvore Binária de Busca Árvores binárias onde organizados de forma que: os elementos são Todos os elementos na sub-árvore esquerda de cada nó k têm valor menor ou igual ao valor do nó k. Todos os elementos na sub-árvore direita de cada nó k têm valor maior do que o valor no nó k. 2 Árvore Binária de Busca Árvore binária onde os elementos x, y e z são organizados do seguinte modo: x y<x z>x 3 Árvore Binária de Busca Seja a seguinte sequência de números: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53. A árvore construída seria: 50 20 79 8 4 39 15 26 58 42 53 88 71 85 96 4 Adicionar Chave Sempre em uma folha. Procedimento Incluir (raiz, x): Se elemento na raiz > x então Incluir (esquerda, x) Senão, se elemento na raiz < x então Incluir (direita, x) Senão elemento na raiz != x então Aloque um nó Adicione x neste nó 5 Adicionar Chave Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53. 50 20 79 8 4 39 15 26 58 42 53 88 71 85 96 6 Buscar Chave Função Buscar (raiz, x): Se elemento na raiz > x então Retorna Buscar (esquerda, x) Senão, se elemento na raiz < x então Retorna Buscar (direita, x) Senão elemento na raiz != x então Retorna raiz; 7 Busca Chave Buscar as chaves: 26, 71. 50 20 79 8 4 39 15 26 58 42 53 88 71 85 96 8 Buscar Chaves Melhor caso: O(lg n) Pior caso: O (n) Por que? 1 2 3 4 9 Remover Nó 1) Remover folha; 2) Remover Nó com um filho; 3) Remover Nó com dois filhos. 50 20 79 8 4 39 15 26 58 42 53 88 71 96 10 Remover Nó Procedimento Remove (raiz, x){ No Busca (raiz, x); Se No != Null então { } } 11 Remover Nó Procedimento Remove (raiz, x) Nó Busca (raiz, x); Se No != Null então Se Nó é folha então apague apontador para a folha; 12 Remover Nó Exemplo: Remove (raiz, 53) 50 20 79 8 4 39 15 26 58 42 53 88 71 85 96 13 Remover Nó Exemplo: Remove (raiz, 53) 50 20 79 8 4 39 15 26 58 42 88 71 85 96 14 Remover Nó Procedimento Remove (raiz, x) Nó Busca (raiz, x); Se No != Null então Se Nó é folha então Apague apontador para a folha; Senão se Nó tem apenas um filho então Pai de x apontar para filho de x 15 Remove Nó Exemplo: Remove (raiz, 58) 50 20 79 8 4 39 15 26 58 42 88 71 85 96 16 Remove Nó Exemplo: Remove (raiz, 58) 50 20 79 8 4 39 15 26 88 42 71 85 96 17 Remover Nó Procedimento Remove (raiz, x) Nó Busca (raiz, x); Se No != Null então Se Nó é folha então Apague apontador para a folha; Senão se Nó tem apenas um filho então Pai de x apontar para filho de x Senão substitua x pelo seu menor sucessor 18 Remover Nó Exemplo: Remove (raiz, 20) Qual o menor sucessor de 20? 50 20 79 8 4 39 15 26 88 42 71 85 96 19 Remover Nó Onde está o sucessor nó que tem filho à direita? 50 20 Um passo à direita. 8 4 39 15 26 Tantos passos à esquerda quantos sejam necessários. 42 20 Remover Nó Exemplo: Remove (raiz, 26) Qual o menor sucessor de 26? 50 26 8 4 79 39 15 88 42 71 85 96 21 Remover Nó 50 39 8 4 79 42 15 88 71 85 96 22 Possível Problema Na inclusão dos seguintes elementos: 50, 20, 27, 42, 40 ... 50 20 A árvore binária pode uma árvore zize-zague. 27 42 40 23 Solução Árvores balanceadas: Árvore AVL; Árvore Rubro-Negra; Árvore ISAM, B e B+ 24 Exercícios 1) Faça os exercícios 4.2, 4.4, 4.5 do Capítulo 4 do Livro SZWARCFITER, J. L., MARKENZON, L. Estruturas de Dados e seus Algoritmos. 3a ed. Rio de Janeiro: LTC, 2010 2) Faça um algoritmo em pseudo-código que remove um nó em uma árvore binária de busca. 25 Referências SZWARCFITER, J. L., MARKENZON, L. Estruturas de Dados e seus Algoritmos. 3a ed. Rio de Janeiro: LTC, 2010. TENENBAUM, A. M., LANGSAM, Y., AUGENSTEIN, M. J. Estruturas de Dados Usando C. São Paulo: Makron, 1995. LEISERSON, C. E., RIVEST, R. L., CORMEN, T. H., STEIN, C. Algoritmos – Teoria e prática. Rio de Janeiro: Campus, 2002. 2