Professor MSc. Ciro Meneses Santos
Professor MSc. Ciro Meneses Santos
P
P
ó
ó
s Gradua
s Gradua
ç
ç
ão em Adm de Redes
ão em Adm de Redes
• TAD – Nivelamento Conceitual
• Árvore Binária de Busca
•Inserir
•Remover
•Localizar
•Caminhamento
• Árvore Balanceada AVL
•Fator de balanceamento
•Rotação
Conte
TAD
Definições:
É um tipo abstrato de dados que herdas as características
das topologias em árvore, utilizado para o armazenamento de dados na memória do computador e a sua subsequente recuperação.
De acordo com Knuth(1997, p 312) Uma árvore Binária A é um conjunto finito de N nós que ou esta vazio ou consistem de um nó chamado raiz mais os elementos de duas árvores binária distintas chamadas de subárvore esquerda e subárvore direita do nó raiz. Cada elemento da árvore conduz a um ou mais elementos.
TAD
Uma vez que cada nó tem no máximo
dois filhos, cada um destes nós (se houverem) são identificados segundo a sua posição relativa à raiz;
Em uma árvore binária de busca cada nó contém um campo chamado chave, podendo haver outras
informações, além dos ponteiros esquerdo e direito.
esq chave dir
nil nil nil nil nil nil nil nil
TAD
Cada elemento da Árvore é denominado Nó (ou vértice).
Nível 0: Nó raiz.
Nível 1: Nós acessados pela raiz.
Nível 2: Nós acessados a partir dos Nós do nível 1. ...
Nó Pai: O Antecessor.
Nó Filho: O apontado pelo Nó pai. Nó Folha: Nó sem filhos.
Nós internos: Nó com filho(s).
Grau da Árvore: O número máximo de filhos para os nó de uma
Tipos Abstratos de Dados
Tipos Abstratos de Dados
Á
Nível (h) Nós (n) 0 1 2 3 1 2 4 8 O número de nós externos de A é 2h.
TAD
Busca
Busca
Dado um valor X, deseja-se localizar, se existir,
um nó na árvore binária de busca cujo chave
seja igual X.
A busca inicia pelo nó raiz. Quando a busca
chega a um nó qualquer da árvore, ou esse nó já
contém o valor procurado e a busca termina,
ou ele contém um valor menor ou maior que X.
Isso orienta o prosseguimento da busca em
Para buscar o valor 3. 3 5 4 6 8 7 3 3 nil
nil nil nil nil nil nil
Busca
Algoritmo Estrutura
Algoritmo Estrutura
typedef struct _no{ int chave;
int cont;
struct _no *esq, *dir; } no;
no* busca(no *arvore, int x){ if (arvore == NULL) return NULL; if (x == arvore->chave) return arvore; if (x < arvore->chave) return busca(arvore->esq, x); else return busca(arvore->dir, x); }
Busca
Busca
Inser
Inser
ç
ç
ão
ão
Para inserir um novo elemento X numa árvore binária Busca-se X na árvore.
Caso não esteja já presente, chega-se a um ponteiro nil e insere-se o novo valor.
Se o elemento a inserir já está na árvore, o algoritmo seguinte incrementa um campo chamado count que conta o número de ocorrências desse elemento na
Algoritmo de inser
Algoritmo de inser
ç
ç
ão
ão
3 5 4 6 8 7 2 2 nil
Algoritmo de inser
Algoritmo de inser
ç
ç
ão
ão
void insere (int x, no **p){ if (*p == NULL){ *p= (no *) malloc(sizeof(no)); (*p)->chave = x; (*p)->dir = NULL; (*p)->esq = NULL; (*p)->cont = 1; }else{ if (x < (*p)->chave){ insere(x, &(*p)->esq); }if(x > (*p)->chave){ insere(x, &(*p)->dir); }if(x == (*p)->chave){ (*p)->cont++; 1 .. 3 .. 5 .. 7 .. 9 .. 11 . 13 . 14 .
Remo
Remo
ç
ç
ão
ão
Para remover o nó que contém a informação X,
devemos considerar 3 casos:
Não existe nó na árvore com a informação X. Æ Ok
O nó contendo X tem 0 ou 1 filho
O nó contendo X tem 2 filhos
Remo
Remo
ç
ç
ão
ão
Para Remover 6, o nó pai do nó removido passa a apontar para nil
3
5
4 6 8
7
nil
nil nil nil nil
6
6
Remo
Remo
ç
ç
ão
ão
Para Remover 6, o nó pai do nó removido passa a apontar para nil
3
5
4 8
7
nil
nil nil nil nil nil
Remo
Remo
ç
ç
ão
ão
Para Remover 3, o nó pai do nó removido passa a apontar para filho do no removido.
3
5
4 8
7
nil
nil nil nil nil nill
Remo
Remo
ç
ç
ão
ão
Para Remover 3, o nó pai do nó removido passa a apontar para filho do no removido.
5
4 8
7
nil nil nil nil nill
Remo
Remo
ç
ç
ão
ão
Para Remover 4, o nó pai do nó removido passa a apontar para filho do no removido.
8 6 9 nil nil nil nill 4 7 2 nil nil 3
Remo
Remo
ç
ç
ão
ão
Para Remover 4, o nó com o valor removido é substituído pelo maior valor da subárvore esquerda e transforma o pai do nó em nil. 8 6 9 nil nil nil 3 7 2 nil nil
Caminhamento
Caminhamento
Pr
Pr
é
é
ordem
ordem
Pré-ordem (
Localizar informação na árvore )
visita raiz;
caminha subárvore esquerda em pré-ordem;
caminha subárvore direita em pré-ordem.
Caminhamento
Caminhamento
P
P
ó
ó
s
s
-
-
Ordem
Ordem
Pos-Ordem ( Remove node da árvore )
caminha subárvore esquerda em pós-ordem;
caminha subárvore direita em pós-ordem;
visita raiz.
3
Caminhamento
Caminhamento
Central Ordem
Central Ordem
Central ou InOrdem (
Imprimir elementos em ordem)
caminha subárvore esquerda na ordem central;
visita raiz;
caminha subárvore direita na ordem central.
Ordem de caminhamento:
6 15 7 3 2 4 13 9 18 17 20 19 25 16
Caminhamento
Caminhamento
6 15 7 3 2 4 13 9 18 17 20 19 25 16
Caminhamento
Caminhamento
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Árvore Balanceada
Uma árvore binária balanceada é aquela em que, para qualquer nó, suas sub-árvores esquerda e direita têm a mesma altura.
Árvore AVL
Uma árvore binária de busca onde, para cada nó, as alturas de suas subárvores esquerda e direita diferem de no máximo 1 (-1, 0, 1)
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
A Vantagem de uma árvore AVL sobre uma árvore
degenerada está na maior eficiência nas suas operações de busca, pois, sendo a altura da AVL bem menor, o
número necesssário de comparações diminui sensivelmente.
Por exemplo, numa árovre degenerada de 10.000 nós, são necessárias, em média 5.000 comparações, numa árovre AVL, com o mesmo número de nós essa média baixa para 14.
Inser
Inser
ç
ç
ão Balanceada
ão Balanceada
Há 4 casos para serem analisados:
Rotação Simples
Rotação simples na subárvore esquerda Rotação simples na subárvore direita
Rotação dupla
Rotação dupla na subárvore esquerda Rotação dupla na subárvore direita
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Toda vez que uma subárvore fica com um fator
negativo e sua subárvore da esquerda também
tem um fator negativo:
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Toda vez que uma subárvore fica com um fator
positivo e sua subárvore da direita também tem
um fator positivo:
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Toda vez que uma subárvore fica com um fator
negativo e sua subárvore da esquerda tem um fator positivo:
solução – ROTAÇÃO DUPLA À ESQUERDA
A Rotação dupla à Esquerda é composta por uma
rotação simples á esquerda, seguida de uma rotação simples à direita.
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Toda vez que uma subárvore fica com um fator
positivo e sua subárvore da direita tem um fator negativo:
solução – ROTAÇÃO DUPLA À DIREITA
A Rotação dupla à Direita é composta por uma
rotação simples á direita, seguida de uma rotação simples à esquerda.
Á
Á
rvores Balanceadas
rvores Balanceadas
Á
Á
rvores AVL
rvores AVL
Inserção - Exercício
Mostrar as rotações necessárias para a construção da seguinte árvore AVL
3, 2, 1, 4, 5, 6, 7.
Mostrar as rotações necessárias para a construção da
Referência
Referência
Bibliografia
Bibliografia
LEISERSON, C E.; STEIN, Clifford; RIVERT, Ronald L.;
CORMEN, Thomas H. Algoritmos: Teoria e Prática – Rio de Janeiro: Campus, 2002.
ZIVIANI, Nivio. Projeto de Algoritmos. São Paulo: Pioneira Thomson Learning, 2005.
SCHILDT, Herbert. - C Completo e Total - MAKRON Books 1997