UPE – Caruaru – Sistemas de Informação Disciplina: Estrutura de Dados e Arquivo Prof.: Paulemir G. Campos Pesquisas de Dados (Parte 2) 05/11/2015 EDA - Prof. Paulemir Campos 1 Conteúdo Árvores AVL Definição; Exemplo e contra-exemplo; Balanceamento; Exemplo de rotação dupla. Referências 05/11/2015 EDA - Prof. Paulemir Campos 2 Árvores AVL 05/11/2015 EDA - Prof. Paulemir Campos 3 Árvores AVL: Definição Árvore criada por Adelson-Velskii e Landis, daí o nome Árvore AVL; É uma árvore de pesquisa binária balanceada cujo módulo da diferença entre as alturas das sub-árvores esquerda e direita de cada nó nunca é maior do que 1. 05/11/2015 EDA - Prof. Paulemir Campos 4 Árvores AVL: Definição Em outras palavras, o valor do balanceamento de cada nó de uma árvore AVL é igual a 1, 0 ou –1. Caso contrário, a árvore binária não é AVL, pois estará desbalanceada. 05/11/2015 EDA - Prof. Paulemir Campos 5 Árvores AVL: Exemplo -1 1 0 0 0 0 1 0 0 0 05/11/2015 -1 0 0 EDA - Prof. Paulemir Campos 0 0 0 0 6 Árvores AVL: Contra-exemplo Exemplo de Árvore não-AVL -1 1 0 0 0 0 1 0 0 0 05/11/2015 -2 0 0 EDA - Prof. Paulemir Campos 0 0 0 7 Árvores AVL: Balanceamento Balanceamento de Árvore Binária por Rotação Esquerda: ponteiro tArvore GiraEsquerda (ponteiro tArvore raiz) { ponteiro tArvore novaRaiz novaRaiz = raiz->direito raiz->direito = novaRaiz->esquerdo novaRaiz->esquerdo = raiz retorna novaRaiz } 05/11/2015 EDA - Prof. Paulemir Campos 8 Árvores AVL: Balanceamento Exemplo de balanceamento por rotação esquerda. A -2 1 B 0 C -1 0 D 1 F 0 05/11/2015 -1 E A B G -1 D 0 0 0 C 0 E 0 G F EDA - Prof. Paulemir Campos 9 Árvores AVL: Balanceamento Balanceamento de Árvore Binária por Rotação Direita: ponteiro tArvore GiraDireita (ponteiro tArvore raiz) { ponteiro tArvore novaRaiz novaRaiz = raiz->esquerdo raiz->esquerdo = novaRaiz->direito novaRaiz->direito = raiz retorna novaRaiz } 05/11/2015 EDA - Prof. Paulemir Campos 10 Árvores AVL: Balanceamento Exemplo de balanceamento por rotação direita. 2 0 D 1 A -1 B 0 -1 F 05/11/2015 1 E D F 0 0 0 C B G 1 E -1 0 EDA - Prof. Paulemir Campos A C 0 G 11 Árvores AVL: Balanceamento Características: Quando se efetua uma rotação esquerda ou direita numa árvore de pesquisa binária, a ordem dos elementos percorrendo-a em ordem central não se altera. Isto é, a árvore de pesquisa binária continua ordenada. 05/11/2015 EDA - Prof. Paulemir Campos 12 Árvores AVL: Balanceamento Características: Árvore desbalanceada com valor negativo pode ser balanceada com rotação esquerda; Árvore desbalanceada com valor positivo pode ser balanceada com rotação direita. 05/11/2015 EDA - Prof. Paulemir Campos 13 Árvores AVL: Balanceamento Descrição das rotações nos seguintes casos: Diferença de altura do nó desbalanceado (hSE-hSD) -2 2 05/11/2015 Diferença de altura do nó filho do nó desbalanceado (hSE-hSD) Tipo de Rotação -1 Simples à esquerda 0 Simples à esquerda 1 Dupla com filho à direita e pai à esquerda -1 Dupla com filho à esquerda e pai à direita 0 Simples à direita 1 Simples à direita EDA - Prof. Paulemir Campos 14 Árvores AVL: Balanceamento Exemplo de Rotação Dupla Dada a árvore de pesquisa binária ao lado, pede-se para balanceá-la aplicando operações de rotação à esquerda e/ou à direita conforme necessário. 05/11/2015 20 15 12 25 19 18 EDA - Prof. Paulemir Campos 15 Árvores AVL: Balanceamento Exemplo de Rotação Dupla Primeiro aplica-se uma rotação à esquerda no nó 15 da árvore desbalanceada inicial. 2 -1 0 15 12 2 0 1 0 20 25 19 2 19 18 05/11/2015 0 0 12 20 0 25 15 0 EDA - Prof. Paulemir Campos 18 16 Árvores AVL: Balanceamento Exemplo de Rotação Dupla Depois, basta aplicar uma rotação à direita no nó 20 da árvore obtida no passo anterior. 2 19 2 0 0 12 15 20 0 0 25 0 0 0 15 12 19 -1 0 18 20 25 0 18 05/11/2015 EDA - Prof. Paulemir Campos 17 Referências 05/11/2015 EDA - Prof. Paulemir Campos 18 Referências ASCENCIO, A. F. G; ARAÚJO, G. S. Estruturas de Dados: algoritmos, análise da complexidade e implementações em JAVA e C/C++. São Paulo: Pearson Prentice Hall, 2010. 05/11/2015 EDA - Prof. Paulemir Campos 19 Referências SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e seus Algoritmos. 2. ed. Rio de Janeiro: LTC, 1994. 05/11/2015 EDA - Prof. Paulemir Campos 20