INF01203 – Estruturas de Dados
Árvores
Árvores
Constituem uma das estruturas mais importantes da área de computação, inclusive em aplicações A B C D E F G H J K I
Árvores
• Relacionamento Lógico
– Hierarquiaou Subordinação• Onde:
– um subconjunto dos componentes é subordinado a outro A B C D E F G H J K I
Exemplos de Aplicações
• Hierarquia de
subordinação
– Classes e subclasses veículoaéreo terrestre aquático
avião helicóptero particular coletivo motor vela remo
Exemplos de Aplicações
• Hierarquia de
subordinação
– Classes e subclassesBEBIDA
REFRIGERANTE SUCO ALCOÓLICA
COCA GUARANÁ LARANJA UVA CERVEJA WHISKY GIN
BRAHMA SKOL BAVARIA DIET NORMAL DECAF
Exemplos de Aplicações
• Abstração de composição
BRASIL
RJ SC RS SP PR
POA CAXIAS GRAMADO CANELA S.MARIA TORRES
Exemplos de Aplicações
• Organograma de empresa
DIRETOR SUPERINTENDENTE DIRETOR FÁBRICA DIRETOR ADMINISTRATIVO DIRETOR COMERCIAL DEPTO MANUT. DEPTO CONTR. QUAL. DEPTO PRODUÇÃOExemplos de Aplicações
• Diretórios e arquivos
Exemplos de Aplicações
• Organização de informações
LIVROS
AUTOR1 AUTOR2 LYA LUFT AUTOR4 AUTOR5
AS PARCEIRAS A ASA ESQ. DO ANJO
AUTOR NACIONAL AUTOR ESTRANGEIRO TÉCNICOS VIAGEM ROMANCE
Exemplos de Aplicações
• Árvore de derivação
– compilador + a / * b c + d eExpressão aritmética: ( a * b ) + ( c / ( d + e ) )
Exemplos de Aplicações
• Ordenação de valores
200 100 350 150 170 250 500 400 600Formas de Representação
• Diagrama de inclusão
D
B
C
A
A
B
D
C
Formas de Representação
• Diagrama de barras
A...
B...
D...
C...
D
B
C
A
A
...B
... D
...C
Formas de Representação
• Níveis
• Aninhamento
1A; 1.1B; 1.1.1D; 1.2C
( A ( ( B ( D ) ) (C) ) )
D
B
C
A
Definição Formal
• Conjunto finito
T
de zero ou mais nós, tal que:
– número de nodos maior do que zero
• existe um nó denominado raizda árvore
• os demais nós formam m > 0conjuntos disjuntos S1, S2, ..., Sm, onde cada um destes é uma árvore (Sisão denominadas sub-árvores)
– número de nodos igual a zero
• árvore vazia A B C D E F G H J K I raiz
Terminologia
C
B
A
D
Raiz
Terminologia
A B C D E F G H J K ISub-árvores
Raiz
Terminologia
Irmão
X
Pai
Filho
Filho
= filha = descendente = sucessorPai
= mãe = ascendente = antecessorIrmão
= irmãTerminologia
Irmão
X
Pai
Filho
Ascendente/
Descendente
PRÓPRIO
Terminologia
• Grau
– número de sub-árvores do nodo
• Grau de saída
– número de filhos de um nodo
A B C D E F G H J K I grau 3 grau 2 grau 1
Terminologia
• Grau de uma árvore
– máximo entre os graus de seus nodos
A B C D E F G H J K I grau 3 grau 2 grau 1
Terminologia
• Nó de derivação (interno)
– nó com grau maior do que zeroA B C D E F G H J K I
Terminologia
• Nó folha (ou terminal ou externo)
– grau igual a zeroA B C D E F G H J K I
Terminologia
• Floresta
A B C D E F G H J K I X Y M N O P L Q S T RTerminologia
• Caminho
– seqüência de nodos distintos, tal que existem sempre nodos consecutivos A B C D E F G H J K I
Terminologia
• Comprimento do caminho
– seqüência de nodos distintos, tal que
• existem sempre nodos consecutivos
• v1alcança vke vké alcançado por v1
A B C D E F G H J K I
v
1v
kTerminologia
• Nível
– número de ligações entre o nodo e a raiz, acrescido de uma unidade A B C D E F G H J K I
nível 1
nível 2
nível 3
nível 4
Terminologia
• Altura (profundidade)
– maior nível A B C D E F G H J K Inível 4
Terminologia
• Árvore ordenada
– ordem das sub-árvores é relevante
A B A B
≠
A B A B≠
C CDefinição Formal
• Conjunto finito
T
de zero ou mais nós, tal que:
– número de nodos maior do que zero
• existe um nó denominado raizda árvore
• os demais nós formam m > 0conjuntos disjuntos S1, S2, ..., Sm, onde cada um destes é uma árvore (Sisão denominadas sub-árvores)
– número de nodos igual a zero
• árvore vazia A B C D E F G H J K I raiz
Operações sobre as Árvores
• Dados
– árvore A
• Operações
– criação da árvore
– inserção de um novo nodo
• raiz • folha
• posição intermediária
– exclusão de um determinado nodo – acesso a um nodo
• determinar forma de percorrer a árvore
– destruição da árvore
TAD - operações
procedure inicializa(...);
// inicializa a árvore
procedure insere(...);
// insere um nodo na árvore
procedure remove(...);
// remove um nodo da árvore
function localiza (...): ...;
// busca o campo de informação de um nodo
procedure visita(...);
// percorre todos os nodos da árvore
procedure destroi(...);
Outras Operações
function raiz(...): ...;
// retorna a raiz da árvore
function pai(...): ...;
// retorna o nodo pai de um nodo n
function filho(...): ...;
// retorna o primeiro filho de um nodo n
function tamanho(...): inteiro;
// retorna o número de nodos em uma árvore
...
Árvores
• Como armazenar os nós de uma árvore?
• Como percorrer uma árvore?
• Como inserir novos nós?
• Como excluir nós?
A B C D E F G H J K IÁrvores Implementadas por
Contigüidade Física
Árvores – Contigüidade Física
• Os nodos da árvore são dispostos na memória
segundo uma
convenção
estabelecida
1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 3 B 1 E 0 C 0 D 2 F 0 G 0
A
D
C
B
G
F
E
Árvores – Contigüidade Física
• várias formas• definir uma estratégia • conhecer a estratégia
para realizar operações
A
D
C
B
H
F
E
G
I
1 A B C D E F G 2 3 4 5 6 7 A B E C D F G 1 2 3 4 5 6 7 em profundidade por níveisÁrvores – Contigüidade Física
1 2 3 4 5 6 7 8 9 10 11 12 13 A B C D E F G H / NODO 1 2 3 4 5 6 7 8 9 10 11 12 13 2 2 0 3 0 0 0 0 0 0 0 0 0 DESCENDENTES 2 arranjos árvore representada por níveis
B
C
A
D
E
G
F
H
Árvore Ternária
A
D
C
B
G
F
E
1 2 3 4 5 6 7 8 9 10 11 12 13A B C D E * * * * * F G *
f1(i) = ?
f2(i) = ?
f3(i) = ?
TAD Árvore – contigüidade física
• Árvore representada por níveis
– aInfo: Array [1..n] de Info; – aFilhos: Array [1..n] de inteiro; – Descritor da árvore (descA)
• raiz: inteiro; // endereço da raiz no array • numNodos: inteiro;
• altura: inteiro; • grauMax: inteiro;
TAD - operações
procedure inicializa(var a: descA);
// inicializa a árvore
procedure insere(var a: descA; var a1: aInfo; var a2: aFilhos; dado: Info; pai: Info);
// insere um nodo na árvore
procedure remove(var a: descA; var a1: aInfo; var a2: aFilhos; dado: Info);
// remove um nodo da árvore
function localiza (a: descA; a1: aInfo; a2: aFilhos; dado: Info):inteiro;
// busca o campo de informação de um nodo e retorna o índice do array
procedure visita(a: descA; a1: aInfo; a2: aFilhos);
// percorre todos os nodos da árvore
procedure destroi(var a: descA);
// destrói a árvore
Análise – Contigüidade Física
• não constitui, em geral, uma boa solução
• dificuldades para
manipulação da estrutura
(hierarquia)
• geralmente eficiente em termos de espaço
ocupado
Análise – Contigüidade Física
• Exceção 01
– quando os nodos são processados exatamente na mesma ordem em que são armazenados
• Exceção 02
– quando, excetuando-se as folhas, que aparecem no mesmo nível, os demais nodos têm graus iguais ou muito próximos 1 2 3 4 5 6 7 A B C D E F G A 1 2 3 4 5 6 7 A B F C E λ G λ D λ B C F G E D A B F D G E C
Árvores Implementadas por
Encadeamento
Árvores - Encadeamento
A / C / / / / B / / / D / / E / / / / F / / / / G / / / / Endereços da raiz das sub-árvores Endereço da raizA
D
C
B
G
F
E
Árvores - Encadeamento
• Problema:
– árvore de grau arbitrário tem número elevado de
campos ociosos
A
C
B
E
F G
H
I
J
K
D
A / / / B / / / / / C / / / / / / D E / / / / / / F / / / / / / G / / / / / / H / / / / / / I / / / / / / J / / / / / / K / / / / / /TAD Árvore – contigüidade física
• nodoA // Nodo da árvore
– dado: Info – filho1: ^nodoA – filho2: ^nodoA – ...
– filhoN: ^nodoA
• Descritor da árvore (descA)
– raiz: ^nodoA; // endereço da raiz no array – numNodos: inteiro;
– altura: inteiro; – grauMax: inteiro;
TAD - operações
procedure inicializa(var a: descA);
// inicializa a árvore
procedure insere(var a: descA; dado: Info; pai: Info);
// insere um nodo na árvore
procedure remove(var a: descA; dado: Info);
// remove um nodo da árvore
function localiza (a: descA; dado: Info):^nodoA;
// busca o campo de informação de um nodo e retorna o ponteiro para o nodo
procedure visita(a: descA);
// percorre todos os nodos da árvore
procedure destroi(var a: descA);
// destrói a árvore