Escolar Documentos
Profissional Documentos
Cultura Documentos
Dados
ICEx/UFF
Volta Redonda-RJ
© 2002-2020
Estrutura de Dados
Sumário
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 2
Estrutura de Dados
ÁRVORES ENRAIZADAS
1. Introdução
2. Definições Básicas
3. Representação
1. Diagrama de Inclusão
Raiz=A
2. Parênteses Aninhados
(A(B)(C(D(G)(H))(E)(F(I))))
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 3
Estrutura de Dados
3. Forma Hierárquica
Ex:
raiz
A
B C
D E F
G I
H
TD= {D, G, H}
TF= {F, I}
TE = {E}
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 4
Estrutura de Dados
Ex: Filhos de D: G e H
Filhos de A: B e C
Pai de E: C
Irmãos de D: E e F
Avô de H: C
Ex: descendentes de B: B
descendentes de A: todos os nós, inclusive A
ancestral de G: G, D, C, A
descendentes próprios de D: G e H
ancestrais próprios de B: A
Ex: B, E, G, H, I
Ex: A, C, D, F
Um caminho na árvore T é uma sequência (de pelo menos um nó) v 1, v2, ..., vn de
vértices, tal que vi é pai de vi+1, i = 1, ..., k-1.
OBS.: Existe sempre um único caminho entre um vértice e qualquer um dos seus
descendentes.
Ex: altura de D: 2
altura de A: 4
altura de qualquer folha: 1
Definição: Uma árvore é estritamente m-ária se cada vértice tem zero ou m filhos.
Neste caso, um nó com m filhos é chamado cheio e quando não é cheio é folha.
B C
E F
D
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 6
Estrutura de Dados
B C
D E F G
H I
Definição: Uma árvore m-ária é cheia quando todos os nós não cheios estão no último
nível.
B C
D E F G
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 7
Estrutura de Dados
5. Árvores Binárias
Ex: A
B C
D E F G
H I
struct tree{
struct tree *esq;
int chave;
struct tree *dir;
};
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 8
Estrutura de Dados
Ex:
raiz
B C
D E F
G H
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 9
Estrutura de Dados
a)
40
25 33
C
23 12
E 48
F 67
10 65
35
b)
8
2 11
C
1 E
5 F
9 12
10
3 6 10
4 7
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 10
Estrutura de Dados
Em C:
1. Inorder
2. Preorder
3. Postorder
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 11
Estrutura de Dados
raiz
43
23 21
15 18 27
33 9
12
return 1;
return (contaFolhas(raiz->esq) + contaFolhas(raiz->dir);
}
if(!raiz)
return 0;
e=1+altura(raiz -> esq);
d=1+altura(raiz -> dir);
return (e >= d ? e : d);
}
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 13
Estrutura de Dados
Definição: Uma ABB é uma árvore binária que armazena chaves não repetidas. E para
cada nó vale a seguinte propriedade:
i) As chaves situadas na subárvore à esquerda da raiz são menores que a raiz;
ii) As chaves situadas na subárvore à direita da raiz são maiores que a raiz;
iii) As subárvores esquerda e direita também são binárias de busca.
Note que, uma Árvore Binária de Busca pode ser vazia.
struct tree{
struct tree *esq;
int chave;
struct tree *dir;
};
Ex:
38
32 51
C
21 35
E 45
F 62
10
33 36 49
25
34 37
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 14
Estrutura de Dados
65, 73, 90, 80, 60, 40, 20, 70, 30, 50, 35, 45, 55, 75, 77, 25, 15, 63, 85, 27, 88, 92.
Operações:
1. Busca
- Iterativo:
#define TRUE 1
#define FALSE 0
- Recursivo:
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 15
Estrutura de Dados
2. Inserção
A chave a ser inserida ficará sempre em uma folha. Não há repetição de chaves.
- Iterativo:
- Recursivo: (fazer)
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 16
Estrutura de Dados
3. Remoção
12 34
12 17 34
20
20
12 25
15 25
12 23 34 23 34
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 17
Estrutura de Dados
23
20
12 25
12 25
18 23 34 10 18 34
10
- Iterativo:
}
if(f!=p)
{
f->esq=rp->dir;
rp->dir=p->dir;
}
rp->esq=p->esq;
}
}
if(!q)
raiz=rp;
else
(p==q->esq) ? (q->esq=np):(q->dir=rp);
free(p);
}
Exercício: Faça um programa que contenha uma estrutura de ABB que armazena
chaves inteiras e mostre o seguinte menu de opções:
1- Inserir uma chave na árvore
2- Buscar uma chave na árvore
3- Percorrer a árvore (usuário deve escolher um dos caminhamentos)
4- Remover um nó da árvore
5- Contar os nós da árvore
6- Contar os nós folhas da árvore
7- Contar os nós pais da árvore
8- Calcular a altura da árvore
9- Mostrar o maior elemento da árvore
10- Mostrar o menor elemento da árvore
11- Mostrar a soma das chaves na árvore
12- Sair
- Crie funções recursivas para para opção do menu, exceto para as opções 4 e 12.
- Na opção 2, a chave deve ser lida via teclado e mostrar uma mensagem se achou ou
não achou.
- Na opção 3, mostre um menu com as três opções de caminhamento para o usuário.
- Na opção 4, a chave deve ser lida via teclado e fazer a remoção caso a chave exista na
árvore.
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 19
Estrutura de Dados
7. Árvores Balanceadas
Árvores AVL
Definição: A árvore vazia é de altura equilibrada. Seja T uma ABB não vazia com T e e
Td como subárvores esquerda e direita, então T terá altura equilibrada se:
i) Te e Td forem de altura equilibrada:
ii) he-hd ≤1, onde he e hd são as alturas Te e Td, respectivamente.
Definição: Uma árvore AVL é uma ABB que é vazia ou cuja diferença de pesos entre
as alturas das subárvores esquerda e direita é no máximo igual a 1, e as subárvores
esquerda e direita, por sua vez, também são árvores AVL.
Exemplos:
25 2-3=-1
15 0-1=-1 30 0-2=-2
19 0-0=0 35 1-0=+1
32 0-0=0
Não é AVL
28 2-2=0
20 0-1=-1 30 0-1=-1
26 0-0=0 35 0-0=0
É AVL
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 20
Estrutura de Dados
As rotações são caracterizadas pelo ancestral mais próximo do nó inserido x cujo fator
de equilíbrio passa a ser -2 ou +2. Assim, temos as seguintes rotações:
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 21
Estrutura de Dados
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 22
Estrutura de Dados
8. Árvores B
Definição: Seja d um número natural. Uma árvore B de ordem d é uma árvore ordenada
que é vazia ou satisfaz as seguintes condições:
Ex:
As chaves em T0 <x1 < as chaves em T1 <x2 <...< as chaves em Tm-1 < Tm.
Note que todas as páginas contém 2, 3 ou 4 registros, exceto a raiz que pode conter
apenas um registro.
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 23
Estrutura de Dados
Operações:
1) Busca
2) Inserção
A inserção é feita sempre na folha. Para inserir uma chave x numa árvore B de
ordem d:
O que é cisão?
Consiste em fazer a redistribuição das chaves, caso não haja espaço para a
inserção em um nó já existente.
O processo consiste em criar um novo nó adjacente (vizinho) ao nó que pode
abrigar a chave a ser inserida e fazer a redistribuição simétrica das entradas entre os
dois nós.
Exercício:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 11, 12,
13, 26, 27, 29, 30.
2) Use a mesma sequência para montar uma árvore B de ordem d=3, passo a passo.
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 24
Estrutura de Dados
3) Remoção
- Concatenação
Duas páginas P e Q são chamadas irmãs adjacentes se tem o mesmo pai W e são
referenciadas por dois apontadores adjacentes de W.
P e Q podem ser concatenadas se juntas possuem menos de 2d chaves (no
máximo 2d – 1 chaves).
A concatenação, portanto, vai agrupar as entradas das duas páginas em uma só.
Para que isto ocorra, no nó pai W deixa de existir uma entrada, justamente a da chave
que se encontra entre os apontadores para as irmãs adjacentes P e Q. Essa chave passa a
fazer parte do nó concatenado. Como a soma do número de chaves de P e Q era menor
que 2d, a nova página tem no máximo 2d chaves.
A concatenação pode se propagar até a raiz da árvore, se necessário. Se atingir a
raiz da árvore, provocará a diminuição da altura da árvore.
Ex:
- Redistribuição
se uma cisão.
A redistribuição não é propagável.
Ex:
Exercício:
a) Remover g;
b) Remover r da árvore resultante da letra a;
c) Remover k da árvore resultante da letra b;
d) Remover a da árvore resultante da letra c;
e) Remover p da árvore resultante da letra d;
© 2002– 2020 Prof. Dra. Vera Lúcia Prudência dos Santos Caminha – VFI/ICEx/UFF – Volta Redonda-RJ 26