Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de Dados I
rvores
verso 2.1
rvores
Uma rvore T uma estrutura:
vazia, denotada por T = , ou
composta por:
um n R chamado de n raiz
0 ou mais rvores disjuntas T1, T2, associadas
a R; tais rvores so chamadas de subrvores
de R
rvores
Forma usual de se representar uma rvore:
A
rvores
Forma usual de se representar uma rvore:
raiz
T
T1
B
T2
T3
E
rvores
Nomenclatura relacionada a rvores:
Se T uma subrvore de uma raiz R, ento:
os ns de T so todas as razes de subrvores
de R (e tambm as razes de subrvores de
subrvores, etc.), alm da raiz de T
um n com 0 subrvores chamado de folha
a raiz de T um n filho de R e R pai da raiz
de T
R ancestral a todos os ns de T
Todos os ns de T so descendentes de R
rvores
Nomenclatura relacionada a rvores:
Uma sequncia v0,...,vk de ns de uma rvore T tal
que dois ns consecutivos pertencem relao "
filho de" ou " pai de" chamada de caminho de
tamanho k de T
Exemplos:
A
E,C,A
B
C
D
D,G,I
C,A,D,G
E
F
G
H
rvores
Nomenclatura relacionada a rvores:
O nvel de um n P de uma rvore T o nmero de
vrtices do caminho que vai de P at a raiz de T
Exemplos:
nvel de A = 1
nvel de B, C, D = 2
nvel de E, F, G = 3
nvel de H, I, J = 4
C
E
D
F
G
H
rvores
Nomenclatura relacionada a rvores:
A altura h(P) de um n P o nmero de ns do
maior caminho que vai de P at uma folha
descendente de P
A altura h(T) de uma rvore T a altura de sua raiz
Exemplos:
A
h(B) = 1
B
C
D
h(C) = 2
h(D) = 3
E
F
G
h(A) = 4
H
I
J
h(T) = h(A) = 4
rvores
Nomenclatura relacionada a rvores:
Uma rvore T ordenada se h uma ordem
definida entre as subrvores associadas raiz de T
A
B
C
E
D
F
G
H
Se as rvores ao
lado so
consideradas
iguais, ento so
no ordenadas.
Caso contrrio,
so ordenadas.
A
C
E
D
F
G
H
rvores
Uma rvore ordenada dita m-ria se cada
n possui m subrvores (binria = 2-ria,
ternria = 3-ria, quaternria = 4-ria, etc.),
algumas podendo ser vazias
Exemplo de rvore
ternria (e tambm
quaternria, 5-ria, 6ria, etc.)
A
B
C
E
D
F
G
H
rvores
Numa rvore binria ordenada de raiz R, a primeira
subrvore de cada n chamada de subrvore
esquerda de R (e sua raiz de filho esquerdo de R) e a
segunda subrvore de subrvore direita de R (e sua
raiz de filho direito de R)
Exemplos:
B
D
C
E
F
G
rvores
Uma rvore estritamente m-ria aquela na qual cada
n possui 0 ou m filhos
Exemplos:
B
D
C
E
F
G
A rvore ao lado no
estritamente binria
Se um n for adicionado como
filho de C, a rvore se torna
estritamente binria
rvores
Uma rvore m-ria completa aquela na qual todo n
com alguma subrvore vazia est no ltimo ou
penltimo nveis
Exemplos:
B
D
C
E
F
G
rvores
Uma rvore m-ria cheia aquela na qual todo n com
alguma subrvore vazia est no ltimo nvel
B
D
C
E
rvores
Exerccios:
Qual a altura mxima de uma rvore binria com n
ns?
Qual a altura mxima de uma rvore estritamente
binria com n ns?
Qual a altura mnima de uma rvore binria com n
ns?
Numa rvore binria cheia com n ns, qual o
nmero de ns no ltimo nvel?
rvores
Como implementar uma rvore m-ria?
Alocao de ns:
sequencial
encadeada
Referncia a filhos
sequencial
encadeada
rvores
Espao:
(mN)
O(N2)
Chave:
NosFilhos
Chave:
NosFilhos
Chave:
NosFilhos
rvores
Espao:
(N)
Chave:
Prox
NosFilhos
Chave:
Chave:
Prox
Prox
NosFilhos
NosFilhos
rvores
Espao:
(N)
Chave:
Esq
Dir
Chave:
Dir
Esq
Dir
rvores
Note que, nas duas implementaes anteriores, no h
diferenas no estrutura No a menos de uma rerotulao
dos campos NosFilhos e Prox para, respectivamente,
Esq e Dir
A
converso de
m-ria em
binria
A
B
C
E
D
F
G
H
C
E
D
F
G
H
I
J
rvores
Em outras palavras, podemos
representar qualquer rvore m-ria
por uma rvore binria
rvores
Como implementar uma rvore binria? (continuao)
Alocao sequencial de ns
var MAX_N: Inteiro <NMERO MXIMO DE ELEMENTOS>
//os ns so armezados em
//nveis, da esquerda para direita
estrutura No <TChave, TElem>:
Chave: <TElem>
Elem: <TElem>
estrutura Arvore <TChave, TElem>:
Val(1..MAX_N): No<TChave, TElem>
N: Inteiro
//quantidade de ns
//da rvore
procedimento Constroi(ref T: Arvore)
T.N 0
var T: Arvore
Constroi(T)
T.Val
A
1
F
MAX_N
rvores
Como implementar uma rvore binria? (continuao)
Alocao sequencial de ns
var MAX_N: Inteiro <NMERO MXIMO DE ELEMENTOS>
//os ns so armezados em
deixar
muitos
espaos
//nveis, daPode
esquerda
para
direita
uso TElem>:
por isso, uso
estrutura Nosem
<TChave,
Chave: <TElem>
adequado para rvores
Elem: <TElem>completas
estrutura Arvore <TChave, TElem>:
Val(1..MAX_N): No<TChave, TElem>
N: Inteiro
//quantidade de ns
//da rvore
procedimento Constroi(ref T: Arvore)
T.N 0
var T: Arvore<Caracter, ^Elemento>
Constroi(T)
T.Val
A
1
F
MAX_N
rvores
Como implementar uma rvore binria?
Alocao sequencial de ns
A
Exerccio:
Dado um n V na posio i,
em que posio esto:
o pai de V?
os filhos de V?
T.Elem
T.Elem
A
...
V
i
...
1
MAX_N
F
MAX_N
rvores
Uma floresta pode ser representada
computacionalmente criando-se
artificialmente um n raiz que une todas as
rvores
Percursos
Buscas em rvores
rvores
Um percurso uma visitao ordenada dos ns
Como no h uma ordem pr-definida entre os ns
(como o caso das listas lineares), cada percurso pode
visitar os ns em ordem distinta. Exemplos de
percursos clssicos:
em pr-ordem
em ps-ordem
em in-ordem (ou em ordem simtrica)
em nvel
rvores
Um percurso em pr-ordem numa rvore T aquele
que visita o n raiz de T e, em seguida, percorre em
pr-ordem as subrvores da esquerda e da direita,
nesta ordem
Pr-ordem:
rvores
Percurso em Pr-Ordem
procedimento PercursoPreOrdem(T: ^No)
se T NULO ento
escrever (T^.Chave)
PercursoPreOrdem(T^.Esq)
PercursoPreOrdem(T^.Dir)
procedimento PercursoPreOrdem(ref T: Arvore)
PercursoPreOrdem(T.Raiz)
Tempo:
(N)
rvores
Um percurso em ps-ordem numa rvore T aquele
que percorre em ps-ordem as subrvores da esquerda
e da direita, nesta ordem, e, em seguida, visita o n raiz
de T
Ps-ordem:
rvores
Percurso em Ps-Ordem
procedimento PercursoPosOrdem(T: ^No)
se T NULO ento
PercursoPosOrdem(T^.Esq)
PercursoPosOrdem(T^.Dir)
escrever (T^.Chave)
Tempo:
(N)
rvores
Um percurso em in-ordem (ou em ordem simtrica)
numa rvore T aquele que percorre em in-ordem a
subrvore da esquerda, depois visita o n raiz de T, e,
em seguida, percorre em in-ordem a subrvore da
direita
In-ordem:
A
B
rvores
Percurso em In-Ordem
procedimento PercursoInOrdem(T: ^No)
se T NULO ento
PercursoInOrdem(T^.Esq)
escrever (T^.Chave)
PercursoInOrdem(T^.Dir)
procedimento PercursoInOrdem(ref T: Arvore)
PercursoInOrdem(T.Raiz)
Tempo:
(N)
rvores
Um percurso em nveis numa rvore T aquele que
visita os ns por ordem ascendente de nvel e, entre
aqueles de mesmo nvel, da esquerda para direita
Em nvel:
rvores
procedimento PercursoEmNiveis(T: ^No)
var Prox: ^No, F: Fila<^No>
Constroi(F)
Enfileira(F, T)
enquanto Tamanho(F) > 0 faa
Prox Desenfileira(F)
escrever(Prox^.Chave)
se Prox^.Esq NULO ento
Enfileira(F, Prox^.Esq)
se Prox^.Dir NULO ento
Enfileira(F, Prox^.Dir)
procedimento PercursoEmNiveis(ref T: Arvore)
PercursoEmNiveis(T.Raiz)
Tempo:
(N)
Exerccios
Exerccios
1.
Exerccios
2.
3.
4.
5.
Exerccios
6.
Exerccios
7.
Dada uma rvore binria T de altura H, criar H listas ligadas de forma que
para cada 1 i H haja uma lista ligada com os ns de altura i
8.
Dada uma rvore binria T com nmero de nveis J, criar J listas ligadas
de forma que para cada 1 i J haja uma lista ligada com os ns de nvel
i
9.
Exerccios
10.
Prove ou refute:
a. Se duas rvores possuem a mesma sequncia de visitas aos ns em
nveis, ento so rvores idnticas
b. Se duas rvores possuem a mesma sequncia de visitas aos ns em
pr-ordem, ento so rvores idnticas
c. Se duas rvores possuem a mesma sequncia de visitas aos ns em
ps-ordem, ento so rvores idnticas
d. Se duas rvores possuem a mesma sequncia de visitas aos ns em
in-ordem, ento so rvores idnticas
e. Duas rvores so idnticas somente se possuem a mesma sequncia
de visitas aos ns em pr-ordem, in-ordem e ps-ordem (possuir a
mesma sequncia em dois dentre estes trs percursos no
suficiente para afirmar que as rvores so iguais)