Você está na página 1de 41

Algoritmos e

Estruturas de Dados I
rvores
verso 2.1

Prof. D.Sc. Fabiano Oliveira


fabiano.oliveira@ime.uerj.br

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

Um conjunto de rvores chamado de


floresta

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

B filho esquerdo e C filho


direito de A
F filho direito de C, que no
possui filho esquerdo
G no possui nem filho esquerdo
nem filho direito

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

A rvore ao lado no completa


(C est no antepenltimo nvel)
Se um n for adicionado como
filho de C, a rvore se torna
completa

rvores
Uma rvore m-ria cheia aquela na qual todo n com
alguma subrvore vazia est no ltimo nvel

Exemplo de uma rvore


binria cheia

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)

Como implementar uma rvore m-ria?


Alocao encadeada de ns
//opo 1: alocao sequencial dos filhos
var M: Inteiro <valor de m>
estrutura No<TChave, TElem>:
Chave: <TChave>
Elem: <TElem>
NosFilhos(1..M): ^No
estrutura Arvore<TChave, TElem>:
Raiz: ^No<TChave, TElem>
m: Inteiro
procedimento Constroi(ref T: Arvore,
m: Inteiro)
T.Raiz, T.m NULO, m
var T: Arvore<Caracter, ^Elemento>
Constroi(T, M)

Chave:

NosFilhos

Chave:
NosFilhos

Chave:
NosFilhos

rvores
Espao:
(N)

Como implementar uma rvore m-ria?


Alocao encadeada de ns
//opo 2:

alocao encadeada dos filhos

var M: Inteiro <valor de m>


estrutura No<TChave, TElem>:
Chave: <TChave>
Elem: <TElem>
Prox: ^No, NosFilhos: ^No
estrutura Arvore<TChave, TElem>:
Raiz: ^No<TChave, TElem>
m: Inteiro
procedimento Constroi(ref T: Arvore,
m: Inteiro)
T.Raiz, T.m NULO, m
var T: Arvore<Caracter, ^Elemento>
Constroi(T, M)

Chave:

Prox
NosFilhos

Chave:

Chave:

Prox

Prox

NosFilhos

NosFilhos

rvores
Espao:
(N)

Como implementar uma rvore m-ria?


Alocao encadeada de ns
//opo usual quando rvore binria
estrutura No<TChave, TElem>:
Chave: <TChave>
Elem: <TElem>
Esq: ^No, Dir: ^No
estrutura Arvore<TChave, TElem>:
Raiz: ^No<TChave, TElem>
procedimento Constroi(ref T: Arvore)
T.Raiz NULO
var T: Arvore<Caracter, ^Elemento> Chave:
Constroi(T)
Esq

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:

Visitas ocorrem na ordem:


A, B, D, G, C, E, H, I, F

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:

Visitas ocorrem na ordem:


G, D, B, H, I, E, F, C, A

rvores
Percurso em Ps-Ordem
procedimento PercursoPosOrdem(T: ^No)
se T NULO ento
PercursoPosOrdem(T^.Esq)
PercursoPosOrdem(T^.Dir)
escrever (T^.Chave)

Tempo:
(N)

procedimento PercursoPosOrdem(ref T: Arvore)


PercursoPosOrdem(T.Raiz)

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

Visitas ocorrem na ordem:


D, G, B, A, H, E, I, C, F

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:

Visitas ocorrem na ordem:


A, B, C, D, E, F, G, H, I

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.

Faa um procedimento que em cada n P de uma rvore dada como


entrada atualize um campo chamado:
a. Altura com a altura de P
b. Nvel com o nvel de P
c. SomaChaveD, com a soma de todas as chaves de ns descendentes
de P, mais a chave do prprio P
d. SomaChaveD2, com a soma de todas as chaves de ns
descendentes de P
e. SomaChaveA, com a soma de todas as chaves de ns dos quais P
descendente, mais a chave do prprio P
f. SomaChaveA2, com a soma de todas as chaves de ns dos quais P
descendente
g. PNivel com a porcentagem que o valor da chave de P representa em
relao soma de todas as chaves de ns que se encontram no
mesmo nvel de P

Exerccios
2.

Faa um procedimento que execute um percurso em nveis que, para


aqueles ns num mesmo nvel da rvore, a ordem de visita seja da direita
para a esquerda

3.

Decidir se duas rvores binrias dadas de entrada so idnticas, isto ,


contm os mesmos elementos exatamente nas mesmas posies

4.

Decidir se, dadas duas rvores binrias de entrada, uma subrvore da


outra, isto , um n de uma rvore raiz de uma subrvore idntica
segunda

5.

Verificar se uma rvore T m-ria dada de entrada balanceada, conforme


os seguintes critrios de balanceamento:
a. T balanceada se para quaisquer folhas u e v, as distncias de u e v
at raiz difere de no mximo 1
b. T balanceada se para qualquer n T' de T, a diferena das alturas
das subrvores esquerda e direita de T' no mximo 1

Exerccios
6.

Faa algoritmos que, dada uma rvore binria cujos elementos so


inteiros, computem:
a. o nmero de valores
b. o produto dos valores
c. a soma dos valores em folhas da rvore
d. o maior valor
e. uma lista ligada com os ns que no so folhas
f. o menor valor dentre aqueles associados a ns que no possuem
subrvores vazias
g. a maior soma de valores dos ns de uma subrvore (uma subrvore
de T a rvore que se obtm tomando-se um n X de T e eliminandose de T todos os ns que no sejam X ou no descendam de X)

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.

Dado um ponteiro para um n de uma rvore, determinar o prximo n em


relao ao percurso:
a. in-ordem (ordem simtrica)
b. pr-ordem
c. ps-ordem
d. em nvel
Assuma que cada cada n possui um ponteiro para o n pai

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)

Você também pode gostar