O documento descreve as principais características e conceitos de árvores, incluindo sua estrutura hierárquica, representações, terminologia, operações básicas como inserção e pesquisa, e tipos especiais como árvores binárias e balanceadas.
1. Estrutura de Dados I
Árvores
Prof. Eder Stone Fontoura
Adaptação dos slides da Profa. Cristina Nunes 1
2. Árvores
São estruturas de dados que caracterizam uma relação de hierarquia
entre os dados
um conjunto de dados é hierarquicamente subordinado a outro.
Diferente das listas, não são estruturas de dados lineares.
Podem representar: sistemas de arquivos, interfaces gráficas com o usuário
(organização dos menus), organização das páginas de um site, organização
hierárquica de cargos ou setores de um empresa, etc.
Exemplo:
Presidente
Diretoria Diretoria de Diretoria
Financeira Marketing De Vendas
2
3. Definição
Normalmente é um conjunto finito T de um ou mais nodos tal que:
existe um nodo denominado raiz da árvore;
os demais nodos formam m ≥ 0 subconjuntos disjuntos t1, t2, ..., tm, onde cada um
desses subconjuntos é uma árvore.
as árvores ti (1 ≤ i ≤ M) recebem a denominação de sub-árvore.
D = Raiz
C e E = sub-árvores D
C E
A B F
t1 t2
3
4. Definição
Um mesmo nodo não aparece em mais de uma sub-árvore ao mesmo
tempo nunca teremos sub-árvores interligadas.
A
B C Não é árvore!!!
D
4
5. Definição
Se X é um nó que antecede um nó Y, X é pai de Y ou Y é filho de X.
Nodos que possuem um mesmo pai são ditos irmãos
A raiz é o único nodo que não possui pai
Raiz
G é pai de H
H é filho de G
A e B são irmãos
5
6. Terminologia
Floresta: Se retirarmos o nodo raiz de uma árvore que contém sub-
árvores estaremos criando uma floresta. Os filhos da raiz original serão
as raizes das novas árvores.
D
C G
E
A B F H
C E G
Floresta
A B F H
6
7. Terminologia
Nó externo ou folha: nodos que não possuem filhos.
D
C E
A B F
Nó interno ou galho: nodos que não são folhas e nem raiz.
D
C E
A B F
7
8. Terminologia
Grau de um Nodo: número de sub-árvores de um nodo.
D
Grau = 2 C E Grau = 1
A B F
Nível de um Nodo: número de linhas que liga o nó à raiz. O
nível do nodo raiz é 0.
D Nível = 0
Nível = 1 C E Nível = 1
Nível = 2 A B Nível = 2 F Nível = 2
8
9. Terminologia
Altura da árvore: nível mais alto da árvore.
Altura = 2
D
C E
A B F
Árvore ordenada: quando existe uma ordem linear definida
para os filhos de uma árvore.
9
10. Formas de Representação
Por adjacência (ou contiguidade)
Armazenamento da árvore em um vetor.
Cada posição por vetor pode, por exemplo, conter, além da
informação do nodo, referências aos nodos filhos.
Índice onde está o nodo
Representação:
Ou guardar apenas a informação e o grau no nodo:
10
11. Formas de Representação
Registro fixo
Se o grau da árvore for baixo e/ou a variabilidade do grau entre os nodos
for pouca.
A
B nulo C D nulo
nulo nulo
E F G H I
nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulonulo
J
nulonulo nulo
Problema:
No caso de árvores “genéricas”, em que cada nodo pode ter uma quantidade de
sub-árvores diferentes, é necessário limitar o número máximo de sub-árvores que
cada nodo deve conter.
Nodos de uma mesma árvore são todos do mesmo tipo.
11
12. Árvores Binárias
Estruturas do tipo árvore, onde o grau de cada nodo é sempre
menor ou igual a 2.
Caso especial de árvore em que nenhum nodo tem mais que
dois filhos.
Existe um senso de posição: distingue-se entre uma sub-árvore
esquerda e uma sub-árvore direita.
D
B E
A C F
Não é árvore binária
sub-árvore da esquerda sub-árvore da direita
12
13. Propriedades
O número máximo de nodos no K-ésimo nível de uma árvore
binária é 2k.
Ex.: no nível 2 podemos ter no máximo 22 = 4 nodos.
O número máximo de nodos em uma árvore binária com altura
K é 2K+1 - 1, para K ≥ 0.
Árvore completa: árvore de altura K com 2K+1 - 1 nodos.
D Altura = 2
Nodos = 7
B F
A C E G
13
14. Árvores Genéricas -> Árvores Binárias
A transformação de uma árvore binária produz uma alteração
na estrutura física da mesma, o que pode provocar uma
interpretação errônea da relação hierárquica existente na árvore
original.
Para se interpretar corretamente a hierarquia de uma árvore
transformada em árvore binária, deve-se ter em mente a
transformação havida. Assim, a sub-árvore da esquerda de um
nó é o filho deste nó, enquanto que a sub-árvore da direita é o
seu irmão.
A transformação de uma árvore em árvore binária oferece a
vantagem de não requerer conhecimento prévio da mesma,
para fins de alocação encadeada. A desvantagem em relação à
primeira alternativa reside no fato de não se ter acesso direto
de um nó pai para qualquer um dos filhos, já que para acessar o
i-ésimo filho é necessário acessar os (i - 1) anteriores.
14
15. Árvores Genéricas -> Árvores Binárias
Transformar uma árvore genérica em binária:
Etapa1: Conecta-se os nodos irmãos;
Etapa2: Desconecta-se o nodo pai dos nodos filhos, exceto do 1º filho.
15
17. Representação
Nodos de uma árvore binária terão (no mínimo):
Informação typedef struct nodo{
char info;
referência para o nodo da esquerda nodo * esquerda;
nodo * direita;
referência para nodo da direita. }nodo;
A
B
C
E D
F G
17
18. Ávore de busca binária (Árvore Ordenada)
Uma árvore binária, cuja raiz armazena o elemento R, é
denominada árvore de busca binária se:
todo elemento armazenado na sub-árvore esquerda é menor que R;
todo elemento armazenado na sub-árvore direita é maior que R;
as sub-árvores esquerda e direita também são árvores de busca
binária
D
B F
A C E G
18
19. Operações Básicas
Criar a árvore
Inserir nodos na árvore
Pesquisar nodos na árvore
Excluir nodos da árvore
Determinar a altura da árvore
Determinar o nível de um nodo
Caminhar em uma árvore
19
20. Inserção
Novos nodos inseridos entram sempre na condição de folhas
um nodo não pode entrar numa árvore e já “assumir” filhos.
Para inserir um elemento C
Começamos pelo nodo raiz.
Como C é menor que E, tomamos a sub-árvore da esquerda.
Comparando com a nova raiz temos C > B e conclui-se que o elemento
deve ser armazenado na sub-árvore direita.
O processo se repete até chegarmos a uma sub-árvore nula.
Nesse momento, uma folha é alocada para armazenar o novo elemento e
entra como raiz da sub-árvore nula.
E
E
C
B F
B F Inserindo C
A D G
A D G
C 20
21. Pesquisa
Dado um elemento X a ser procurado entre os nodos da árvore, temos
quatro possibilidades a considerar:
É uma árvore nula, portanto não há nada a fazer;
A raiz armazena o elemento X;
O valor de X é menor que aquele armazenado na raiz: deve-se prosseguir
com a busca na sub-árvore esquerda;
O valor de X é maior ou igual que aquele armazenado na raiz: deve-se
prosseguir com a busca na sub-árvore direita.
21
22. Exercícios
Implementar um programa para criar
árvores binárias de busca. Desenvolver
as seguintes funções:
Adicionar elementos
Apresentar a informação de todos os
elementos
O nó com a informação “x” encontra-se na
árvore?
Nível do nó com a informação “x”
“x” é um nó externo ou interno? 22
23. Caminhamentos
Forma de percorrer a árvore.
Visitar cada nodo apenas uma vez.
Tipos
Pré-fixado (ou pré-ordem)
Central (ou em-ordem)
Pós-fixado (ou pós-ordem)
23
24. Caminhamento Pré-fixado
Passos:
Primeiro: Visita Raiz
Segundo: Percorre sub-árvore da esquerda
Terceiro: Percorre sub-árvore da direita
Ordem de visita nos nodos: 1, 2, 4, 5, 3, 6 e 7
24
25. Caminhamento Central
Passos:
Primeiro: Percorre sub-árvore da esquerda
Segundo: Visita Raiz
Terceiro: Percorre sub-árvore da direita
Ordem de visita nos nodos: 4, 2, 5, 1, 6, 3 e 7.
25
26. Caminhamento Pós-ordem
Passos
Primeiro: Percorre sub-árvore da esquerda
Segundo: Percorre sub-árvore da direita
Terceiro: Visita Raiz
Ordem de visita nos nodos: 4, 5, 2, 6, 7, 3 e 1
26
27. Exemplo
-
* /
+ C D -
A B E F
PRÉ: - * + a b c / d - e f
CENTRAL: (expressão original) a + b * c - d / e - f
PÓS: (notação polonesa) a b + c * d e f - / -
27
28. Alternativas de Árvores Binárias
Aspecto fundamental do estudo de árvores de busca:
o custo de acesso a uma informação desejada.
Alternativas:
Árvore balanceada
Árvore-B
28
29. Árvore Balanceada
Idéia: manter os ramos da árvore sempre "no mesmo nível".
custo para manipular uma informação na árvore se mantém
semelhante tanto para os ramos à esquerda quanto para os ramos
à direita.
As suas sub-árvores à esquerda e à direita possuem a mesma
altura.
Quando uma árvore cresce muito para um dos lados ela é dita
degenerada (ou desbalanceada).
Árvore balanceada Árvore degenerada
29
30. Árvore Balanceada
O processo de balanceamento pode se tornar muito pesado
quando a árvore contém muitos nós e várias inserções são feitas.
Em 1962, dois matemáticos russos (Adelson Velskii e Landis)
introduziram um conceito menos rigoroso de árvores
balanceadas.
Uma árvore é considerada balanceada quando, para cada nó n, as
alturas das sub-árvores à esquerda e à direita diferem no máximo de
1.
A esta diferença chamamos de "fator de balanceamento de n”
(FatBal(n)).
Este algoritmo é conhecido como árvore AVL.
30
31. Árvore Balanceada
Características
Diferença da altura da sub-árvore esquerda e direita é no máximo 1
Se um nodo raiz não satisfaz a condição de altura, então ele é
considerado desbalanceado.
Exemplo
Árvore AVL Árvore desbalanceada
Altura(100) = Altura(SD) – Altura(SE) Altura(150) = Altura(SD) – Altura(SE)
Altura(100) = 2 – 1 = 1 Altura(150) = 2 – 0 = 2
31
32. Árvore Balanceada
Balanceamento
Processo que busca a distribuição equilibrada dos nodos de
modo a otimizar a operação de consulta, isto é, minimizar o
número médio de comparações necessárias para localizar
uma chave.
É desejável que as chaves mais solicitadas estejam
próximas à raiz.
Uma árvore é completamente balanceada se a distância
média dos nodos até a raiz for mínima.
32
33. Árvore-B
São árvores balanceadas projetadas para trabalhar com
dispositivos de armazenamento secundário como discos
magnéticos por exemplo.
Visam otimizar as operações de entrada e saída nos
dispositivos.
O tempo de acesso às informações em um disco é prejudicado
principalmente pelo tempo de posicionamento do braço de leitura.
Uma vez que o braço esteja posicionado no local correto, a leitura
pode ser feita de forma bastante rápida.
Diferente das árvores binárias, cada nó em uma árvore B pode
ter muitos filhos
o grau de um nó pode ser muito grande.
33
34. Árvore-B
Definição
Uma árvore B de ordem d é uma árvore com as seguintes
características:
A raiz tem no mínimo uma chave e dois filhos;
Uma folha tem no mínimo d chaves e não tem filhos;
Todos os outros nós têm no mínimo d chaves e d+1 filhos;
Todos os nós têm, no máximo, 2d chaves e 2d+1 filhos.
A ordem d indica a quantidade máxima e mínima de chaves
dentro dos nodos.
34
35. Árvore-B
Estrutura
Os nodos são compostos por chaves, ponteiros e informações.
Para cada chave está associada somente uma informação.
Pode-se ter informações adicionais que facilitam a manipulação
dos nodos
Ex.: um campo para guardar o endereço do nodo pai e o número de
chaves ativas dentro dos nodos
Existe um ponteiro externo que aponta para raiz, indicando o início
da árvore.
35
36. Árvore-B
Exemplo
Árvore B de ordem 2 (d = 2)
O nodo raiz pode conter no mínimo 1 chave e 2 apontadores e no
máximo 4 chaves com 5 apontadores.
Os nodos internos poderão conter no mínimo 2 chaves com 3
apontadores e no máximo 4 chaves com 5 apontadores.
36
37. Árvore-B
Principais Vantagens:
A utilização de memória é de no mínimo 50%.
As operações realizadas sobre a árvore-B tem como conseqüência
uma ordenação natural das chaves.
Ótima para operações do tipo:
recuperar um determinado número de registros a partir de uma chave
ou encontrar sucessores e predecessores
37
38. Árvore-B
As árvores-B diminuem e aumentam de uma única forma:
através da divisão de um nodo em dois irmãos ou através da união
de dois irmãos em um único nodo.
O aumento ou diminuição da árvore são processos que sempre
iniciam nos nodos folha e podem propagar-se até a raiz.
Operações:
Pesquisa:
Análoga ao percurso em árvores binárias de busca.
Numa pesquisa binária, os ramos da árvore tomados para um nodo
dependem da comparação entre a chave pesquisada e a chave
armazenada no nodo.
Se a chave pesquisada é menor é tomado o braço esquerdo, se for
maior o direito.
Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreebusca.htm
38
39. Árvore-B
Inserção:
É feita uma pesquisa até a folha apropriada para ser feita a inserção.
Existem 3 possibilidades:
se existir espaço na folha, o dado é simplesmente inserido;
se não houver espaço no nodo, verifica-se no irmão adjacente se há
espaço. Se houver, toma-se a chave mais a direita do nodo a inserir e
promove a "chave pai". A "chave pai" anterior é inserida no irmão
adjacente. Desta forma, abre-se um espaço no nodo em que a chave deve
ser inserida;
se não houver espaço no irmão adjacente, deve ocorrer a cisão do nodo
em que a chave deve ser inserida . Neste caso, total de chaves em um
nodo é dividido d, ficando assim as d menores chaves em um nodo e as d
maiores chaves em outro. A chave mais à esquerda das d maiores chaves
é promovida a "chave pai" (é inserida no nodo pai) dos nodos criados na
cisão. Deste modo é criado um espaço nas folhas para ocorrer a inserção.
Se o nodo pai está cheio, o mesmo processo é aplicado para ele, e assim
consecutivamente
Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeinsercao.htm
39
40. G M P X
A C D E N O Y Z
J K R S T U V
Inclusão da Chave B
G M P X
A B C D E
C D E N O Y Z
J K R S T U V
40
41. Chavei–1[x] Chavei[x]
..... ..... N W
P Q R S T U V N=7
Inclusão da Chave O
Chavei[x]
Chavei–1[x] Chavei+1[x]
..... ..... N S
W W
O
P Q R
P Q R
S T U V T U V
N=4 N=3
41
42. A D F H L N P
N=7
A1 A2 A3 A4 A5 A6 A7 A8
Inclusão da Chave E
N=1 H
A D E
F F
H L N P L N P
A1 A2 A3 A4 A5 A6 A7 A8 A1 A2 A3 A4 N=3
N=4
42
43. Árvore-B
Exclusão:
Pesquisa para localizar o nodo correto;
Existem 2 possibilidades:
a chave a ser excluída está em um nodo folha
simplesmente excluída;
a chave a ser excluída não está em um nodo folha
uma chave adjacente é procurada e transferida para o local onde encontra-
se a chave a ser excluída.
esta chave pode ser a primeira chave da folha mais à esquerda da sub-
árvore à direita ou a última chave da folha mais à direita da sub-árvore à
esquerda.
a chave substituta é retirada de uma folha, o que nos leva a uma retirada
em folha.
43
44. Árvore-B
Verificar se a retirada "quebrou" a definição de árvore B:
caso a folha, após a retirada, tenha ficado com menos de d chaves:
verificamos a ordem dos irmãos adjacentes.
se existir um irmão adjacente com mais de d chaves:
é feita uma redistribuição.
A chave mais a esquerda do irmão adjacente é promovida a "chave pai" e a
"chave pai" anterior é inserida no nodo em que a chave foi retirada
(semelhante a inserção).
Se o irmão adjacente tem d chaves
é feita uma concatenação.
Juntar em um único nó as chaves dos irmãos adjacentes mais a "chave
pai", eliminado um nodo folha e uma chave (a "chave pai") do nodo pai.
Dependendo do número de chaves do nodo pai, pode resultar em uma
nova redistribuição ou em uma nova concatenação.
Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeremocao.htm
44