estrutura de dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · o...
TRANSCRIPT
![Page 2: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/2.jpg)
Estruturas de Dados
Árvores (parte 3)
2
![Page 3: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/3.jpg)
Árvores
Organização dos dados: ◦ Linear:
Listas, pilhas, filas.
Relação sequencial.
◦ Não-linear:
Outros tipos de relação entre dados;
Hierarquia;
Árvores
Grafos.
3
![Page 4: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/4.jpg)
Árvores
Estrutura não-linear que representa uma relação de hierarquia
Exemplo:
◦Árvore de diretórios;
◦Árvore genealógica.
4
![Page 5: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/5.jpg)
Árvores
Caracterização de uma árvore: ◦ Composta por um conjunto de nós
◦ Existe um nó r, chamado nó raiz
Este nó contém zero ou mais sub-árvores, cujas raízes são ligadas diretamente a r
Os nós raízes das sub-árvores são ditos filhos do nó pai r ◦ “Nós” que não têm filhos são chamados de folhas
É tradicional desenhar as árvores com a raiz para cima e folhas para baixo
5
![Page 6: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/6.jpg)
Árvores 6
raiz
A B C D …
Sub-árvores do
nó raiz
Filhos de C Filhos de A
![Page 7: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/7.jpg)
Árvores
O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou seja, a quantidade de filhos.
Grau Máximo, ou grau da árvore ◦ Maior grau de seus nós.
Nós que não tem grau (grau == 0), são denominados de nó folha
Para identificar os nós de uma estrutura, usamos a relação de hierarquia existente em uma árvore genealógica ◦ Filho, pai, neto, irmão
7
![Page 8: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/8.jpg)
Árvores
Nível ◦ Representa a distância de um nó até a raiz
◦ O nó de maior nível nos fornece a altura
◦ Só existe um caminho da raiz para qualquer nó
8
nível 0
nível 1
nível 2
nível 3
![Page 9: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/9.jpg)
Árvores
Árvore cheia ◦ Árvore com número máximo de nós.
◦ Uma árvore de grau d tem número máximo de nós se cada nó, com exceção das folhas, tem grau d.
9
![Page 10: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/10.jpg)
Árvores Binárias
◦Tipo de árvore em que seus nós possuem no máximo duas sub-árvores
Árvore de grau máximo igual a 2
◦As duas sub-árvores de cada nó são denominadas:
sub-árvore esquerda
sub-árvore direita
Árvore binária completa
◦Árvore em que cada nó possui dois filhos, exceto o nó folha.
10
![Page 11: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/11.jpg)
Árvores Binárias
11
A
B C
D E F
G
Nivel 1
Nivel 2
Nivel 3
Raízes das sub-árvores
Raiz
Esquerda Direita
Grau máximo: 02
Folhas
![Page 12: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/12.jpg)
Árvores Binárias
A maioria das funções de manipulação de árvores são implementadas de forma recursiva
Que operações serão necessárias? Criação/Iniciliazação da árvore Cria nó raiz Árvore vazia Imprimir a árvore Inserir filho esquerdo Inserir filho direito Remover um determinado nó
12
![Page 13: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/13.jpg)
Árvores Binárias
Percurso ◦Um percurso define a ordem em que os nós de uma árvore serão processados
Tipos de percurso: ◦Pré-ordem Utiliza o nó
Percorre a sub-árvore esquerda
Percorre a sub-árvore direita
◦In-ordem Percorre a sub-árvore esquerda
Utiliza o nó
Percorre a sub-árvore direita
13
![Page 14: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/14.jpg)
Árvores Binárias 14
A
B C
D E GF
Pré-ordem:
In-ordem
Pós-ordem
ABDECFG
DBEAFCG
DEBFGCA
![Page 15: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/15.jpg)
Árvores binárias de pesquisa
1. Todas as chaves da subárvore esquerda são menores que a chave da raiz.
2. Todas as chaves da subárvore direita são maiores que a chave raiz.
3. As subárvores direita e esquerda são também Árvores Binárias de Busca.
15
![Page 16: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/16.jpg)
Árvores binárias de pesquisa 16
![Page 17: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/17.jpg)
Árvores binárias de pesquisa
Solução para implementação da busca binária encadeada.
Busca binária sequencial: ◦ Cada comparação na busca binária reduz o número de possíveis candidatos por uma fator de 2. Sendo assim, o número máximo de comparações da chave é aproximadamente log2N.
Árvore binária de pesquisa: ◦ Quando a árvore tem altura mínima possui o mesmo comportamento.
17
![Page 18: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/18.jpg)
Árvores binárias de pesquisa
Implementação: ◦ Mudança nos métodos:
Busca (pesquisa);
Inserção
Remoção
Exibição só in-ordem
18
![Page 19: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/19.jpg)
Árvores binárias de pesquisa 19
t_no * busca(t_arvore tree, t_elemento dado)
{
t_no* achou;
if (tree == NULL)
return NULL;
if (compara(tree->dado, dado)==0)
return tree;
achou = busca(tree->esq, dado);
if (achou == NULL)
achou = busca(tree->dir, dado);
return achou;
}
![Page 20: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/20.jpg)
Árvores binárias de pesquisa 20
t_no * busca(t_arvore tree, t_elemento dado)
{
if (tree == NULL)
return NULL;
if (compara(tree->dado, dado)==0)
return tree;
if (compara(tree->dado, dado)>0)
return busca(tree->esq, dado);
else
return busca(tree->dir, dado);
}
![Page 21: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/21.jpg)
Árvores binárias de pesquisa 21
t_no * buscaSetPai(t_arvore tree, t_elemento dado, t_no ** pai)
{
if (tree == NULL) {
*pai = NULL;
return NULL;
}
if (compara(tree->dado, dado)==0)
return tree;
if (compara(tree->dado, dado)>0) {
*pai = tree;
return buscaSetPai(tree->esq, dado, pai);
}
else {
*pai = tree;
return buscaSetPai(tree->dir, dado, pai);
}
}
![Page 22: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/22.jpg)
Árvores binárias de pesquisa 22
int inserir (t_arvore *tree, t_elemento item)
{
int ok;
// se a raiz for nula, entao insere na raiz
if (*tree == NULL) {
*tree = criar();
if (*tree == NULL)
return 0;
(*tree)->dado = item;
return 1;
}
if (compara((*tree)->dado, item)<0)
ok = inserir (&((*tree)->dir), item);
else
if (compara((*tree)->dado, item)>0)
ok = inserir (&((*tree)->esq), item);
else
ok = 0;
return ok;
}
![Page 23: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/23.jpg)
Árvores binárias de pesquisa
Remoção ◦ Nó a ser removido não possui filhos:
Remove-se o nó e a ligação do pai com o filho é anulada.
◦ Nó a ser removido possui apenas 1 filho:
Remove-se o nó e o pai passa a apontar para o ex-neto, que agora vira filho.
◦ Nó a ser removido possui dois filhos:
Obtém-se o sucessor do nó. O sucessor vai para o lugar do no a ser excluído. O pai do sucessor, aponta agora para o ex-neto. O sucessor->dir passa a apontar para onde o no->dir apontava.
23
![Page 24: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/24.jpg)
Árvores binárias de pesquisa 24
![Page 25: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/25.jpg)
Árvores binárias de pesquisa
Sucessor: ◦ Menor nó do conjunto de nós maiores que o nó atual.
Antecessor: ◦ Maior nó do conjunto de nós menores que o nó atual.
25
![Page 26: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/26.jpg)
Árvores binárias de pesquisa 26
int remover (t_arvore *tree, t_elemento item) {
t_no *no, // no aponta para o no a ser removido
*pai, // pai aponta para o pai do no
*sub, // sub aponta que ira substituir o no no
*paiSuce, // pai do no sucessor
*suce; // sucessor do no no
no = *tree; pai=NULL;
no = buscaSetPai(*tree, item, &pai); // procura o no a ser removido, e seta o seu pai.
if (no==NULL)
return 0; // a chave nao existe na arvore, nao conseguiu remover
if (no->esq == NULL) // ver os dois primeiros casos, o no tem um filho no maximo
sub = no->dir;
else {
if (no->dir == NULL)
sub = no->esq;
else { // caso em que o no tem dois filhos
}}
// insere sub na posicao ocupada anteriormente por no
if (pai == NULL) // no eh a raiz, nao tem pai
*tree = sub;
else // verifica se o no eh o filho da esquerda ou da direita
if (no == pai->esq)
pai->esq = sub;
else
pai->dir = sub;
free(no); // libera o no
return 1; // verdadeiro, conseguiu remover
}
![Page 27: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/27.jpg)
Árvores binárias de pesquisa 27
else { // caso em que o no tem dois filhos
paiSuce=no;
sub = no->dir;
suce = sub->esq; // suce eh sempre o filho esq de sub
while (suce != NULL) {
paiSuce = sub;
sub = suce;
suce = sub->esq;
}
// neste ponto, sub eh o sucessor em ordem de no
if (paiSuce != no) {
// no nao e o pai de sub, e sub == paiSuce->esq
paiSuce->esq = sub->dir;
// remove o no sub de sua atual posicao e o
// substitui pelo filho direito de sub
// sub ocupa o lugar de no
sub->dir = no->dir;
}
// define o filho esquerdo de sub de modo que sub
// ocupe o lugar de no
sub->esq = no->esq;
}
![Page 28: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/28.jpg)
Árvore binária estrita
Todo nó não folha possui filhos a esquerda e a direita = Árvore Binária Estrita
Uma árvore binária estrita com n folhas sempre contém 2n-1 nós
28
![Page 29: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/29.jpg)
Árvores binárias
Árvore binária cheia de nível d: árvore binária estrita com todas as folhas no nível d
Árvore binária completa de nível d: uma árvore binária estrita com todas as folhas no nível d ou no nível d-1
29
![Page 30: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/30.jpg)
Árvores binárias 30
D E
B
H I
F G
C
A
H I
D
J K
E
B
L M
F
N O
G
C
A
Completa Cheia
![Page 31: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/31.jpg)
Árvores binárias
O total de nós n em uma árvore binária cheia de altura d é a soma do número de nós a cada nível
n = 20 + 21 + 22 + ..... + 2d = Ʃ 2j
n = 2d+1 -1 d = log (n+1) –1
número de folhas de uma árvore cheia com n nós
2d = 2log(n+1)-1 = 2log(n+1) = n+1 2 2
31
![Page 32: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/32.jpg)
Árvores binárias 32
H I
D
J K
E
B
L M
F
N O
G
C
A
Árvore Binária Cheia de altura 3 23+1-1 = 15 nós
![Page 33: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/33.jpg)
Árvores binárias
Seja T uma árvore binária completa com n nós, então sua altura h = log2n
Seja T’ a árvore obtida pela remoção dos k nós do último nível
T’ é cheia já que T só tinha folhas no último e no penúltimo nível (definição de completa)
nós de T’
n’ = n - k = 2d +1 -1 , onde d é a altura de T’
33
![Page 34: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/34.jpg)
Árvores AVL
Os algoritmos convencionais podem gerar árvores degeneradas ou ótimas ◦ Árvores de crescimento irrestrito
Árvores AVL (Adelson-Velskki & Landis) ◦ Árvores de busca binária auto-balanceada ◦ Nesse tipo de árvore, as alturas das duas sub-
árvores a partir de cada nó difere no máximo em uma unidade.
◦ Mesmo depois de inclusões e exclusões o custo se mantem O (log n) onde n é o numero de nós
◦ Inserções e eliminações podem requerer o rebalanceamento da árvore, exigindo uma ou mais rotações.
34
![Page 35: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/35.jpg)
Árvores AVL 35
![Page 36: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/36.jpg)
Árvores AVL
Dizemos que uma árvore está balanceada em altura (ou profundidade) quando, para cada nó, a diferença entre as alturas de suas sub-árvores é igual a -1, 0 ou 1.
36
![Page 37: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/37.jpg)
Árvores AVL 37
![Page 38: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/38.jpg)
Árvores AVL
Fator de equilíbrio de um nó
Fe(A) = hEsq – hDir
Fe(A) = 2 – 3 = -1
Fe(C) = 2 – 1 = 1
AVL Fe(N) {-1, 0, +1}; N
38
![Page 39: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/39.jpg)
Árvores AVL
Fe(A) = 2 – 3 = -1 Fe(B) = 1 – 1 = 0 Fe(C) = 2 – 1 = 1 Fe(D) = 0 – 0 = 0 Fe(E) = 0 – 0 = 0 Fe(F) = 1 – 1 = 0 Fe(G) = 0 – 0 = 0 Fe(H) = 0 – 0 = 0 Fe(I) = 0 – 0 = 0
39
![Page 40: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/40.jpg)
Árvores AVL 40
Com base na tabela acima, se tivéssemos 1.048.575 elementos, poderíamos armazená-los em uma árvore binária perfeitamente balanceada com 20 níveis. Em outras palavras, poderíamos localizar um elemento qualquer dentro dessa árvore com apenas 20 comparações.
![Page 41: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/41.jpg)
Árvores AVL
O que pode acontecer quando um novo nó é inserido numa árvore balanceada ?
Dada uma raiz r com subárvores L (left) e R (right), e supondo que a inserção deve ser feita na sub-árvore da esquerda. Podemos distriguir 3 casos: ◦ Se hL = hR, então L e R ficam com alturas
diferentes mas continuam balanceadas. ◦ Se hL < hR, então L e R ficam com alturas iguais e
balanceamento foi melhorado. ◦ Se hL > hR, então L fica ainda maior e
balanceamento foi violado.
41
![Page 42: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/42.jpg)
Árvores AVL
Inserindo em H ou I, dois casos ◦ Em H: Fe(F) = 1, Fe(C) = 2, F(A) = -2
◦ Em I: Fe(F) = -1, Fe(C) = 2, F(A) = - 2
Inserir e depois rotacionar visto ser necessário alguns ajustes, tal que: ◦ Continue ABB
◦ Continue balanceada
42
![Page 43: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/43.jpg)
Árvores AVL
Rotação simples ◦ Uma rotação simples ocorre quando um nó está desbalanceado e seu filho estiver no mesmo sentido da inclinação, formando uma linha reta.
Rotação dupla ◦ Ocorre quando um nó estiver desbalanceado e seu filho estiver inclinado no sentido inverso ao pai, formando um “joelho”.
43
![Page 44: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/44.jpg)
Árvores AVL
Rebalanceamento mapeado em dois casos ◦ Raíz (2|-2) e filho (1|-1) com o mesmo sinal
Rotação simples do nó com |Fe| = 2 na direção correta
◦ Raíz (2|-2) com um sinal e filho(-1|1) com outro
Rotação do nó com |Fe| = 1 na direção correta
Rotação do nó que tinha |Fe| = 2 na direção oposta
44
![Page 45: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/45.jpg)
Árvores AVL
Rotação à direita ◦ Numa árvore binária basta empurrar o nó N para baixo e para a direita. O filho à esquerda de N o substitui, e o filho à direita do filho à esquerda vem a ser o novo filho à esquerda de N. Segue pseudocódigo:
Seja Y o filho à esquerda de X
Torne X o filho à direita de Y
Torne o filho à direita de Y o filho à esquerda de X.
45
![Page 46: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/46.jpg)
Árvores AVL
Rotação à esquerda ◦ Em uma árvore binária, basta empurrar o nó N para baixo e para a esquerda. O filho à direita de N o substitui, e o filho à esquerda do filho à direita vem a ser o novo filho à direita de N. Segue pseudocódigo:
Seja Y o filho à direita de X
Torne X filho à esquerda de Y
Torne o filho à esquerda de Y o filho à direita de X.
46
![Page 47: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/47.jpg)
Árvores AVL 47
![Page 48: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/48.jpg)
Árvores AVL 48
void roda_dir(ARVORE p)
{
ARVORE q, temp;
q = p->esq;
temp = q->dir;
q->dir = p;
p->esq = temp;
p = q;
}
![Page 49: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/49.jpg)
Árvores AVL 49
8
4
2
3
6
10
q
temp
8
9
14
q
temp
12
temp
q
p
![Page 50: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/50.jpg)
Árvores AVL 50
8
4
2
3
6
10
p
q
temp
![Page 51: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/51.jpg)
Árvores AVL 51
8
4
2
3
6
10
p
q
temp
8
4
2
3
6
10
p
q
temp
![Page 52: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/52.jpg)
Árvores AVL 52
8
4
2
3
6
10
![Page 53: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/53.jpg)
Árvores AVL 53
![Page 54: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/54.jpg)
Árvores AVL 54
![Page 55: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/55.jpg)
55
Rotação simples à esquerda
Rotação simples à direita
![Page 56: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/56.jpg)
56
![Page 57: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/57.jpg)
Árvores AVL 57
![Page 58: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/58.jpg)
Exercícios 58
Balancear
![Page 59: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/59.jpg)
Próximas aulas
Árvores AVL (continuação)
Árvores B e B+
Heap
59
![Page 60: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/60.jpg)
2ª. Prova – 20/03
Reposição – 25/03
Final – 27/03
2º. Trabalho – Deadline 22/03 23h59 GMT-3
60
![Page 61: Estrutura de Dadoswiki.cbatista.net/lib/exe/fetch.php/ed-aula13-arvores_pt... · 2014-03-19 · O número de sub-árvores de um nó determina o “grau de saída“ desse nó. Ou](https://reader034.vdocuments.pub/reader034/viewer/2022050519/5fa341eda6fc45267f357907/html5/thumbnails/61.jpg)
Referências
Notas de Aula do Prof. Bruno B. Boniati
Notas de Aula do Prof. João Luís Garcia Rosa
Notas de Aula do Prof. Derzu Omaia
61