Escolar Documentos
Profissional Documentos
Cultura Documentos
Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br
Sales
Manufacturing
R&D
Interna-onal
Laptops
Desktops
Asia
Canada
rvores
Vetores
e
Listas
so
-mos
para
representar
estrutura
de
dados
lineares,
mas
no
para
modelar
dados
hierrquicos
Exemplos
de
dados
hierrquicos:
sistema
de
arquivos
de
um
computador
Uma
rvore
uma
estrutura
de
dados
recursiva
que
permite
representar
dados
dispostos
de
maneira
hierrquica.
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
Denio
de
rvore
Uma
rvore
composta
por
um
conjunto
de
ns
Existe
um
n
raiz
que
contm
zero
ou
mais
sub-rvores,
cujas
razes(ns
internos)
esto
ligadas
diretamente
raiz.
Os
ns
que
no
tm
lhos
so
chamados
de
folhas
(ns
externos)
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
Denio
de
rvore
Ou
seja,
uma
rvore
uma
coleo
de
n
0
ns,
onde
Se
n=0,
a
rvore
dita
nula
Se
n
>
0,
a
rvore
tem
as
seguintes
caracters-cas:
O
n
inicial
chamado
de
raiz
(root)
Os
demais
ns
so
par-cionados
em
T1,
T2,
...,
Tk
estruturas
disjuntas
de
rvores
As
estruturas
T1,
T2,
...,
Tk
denominam-se
sub-
rvores
Exemplo
de
rvore
Sistema
de
arquivos
C:\
Meus Documentos
Arquivos de Programas
Minhas Imagens
Minhas Msicas
Java
Imagem.png
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
Exemplo
de
rvore
Sistema
de
arquivos
Sub-rvore
Meus
Documentos
C:\
Arquivos de Programas
Minhas Imagens
Minhas Msicas
Java
Imagem.png
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
Exemplo
de
rvore
Sistema
de
arquivos
Sub-rvore
Meus
Documentos
C:\
Raiz
Raiz de Sub-rvore
Arquivos de Programas
Minhas Imagens
Minhas Msicas
Java
Imagem.png
Folha
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
Terminologia
Root:
node
without
parent
(A)
Subtree:
tree
consis-ng
of
a
node
and
its
descendants
Internal
node:
node
with
at
least
one
child
(A,
B,
C,
F)
External
node
(a.k.a.
leaf
):
node
A
without
children
(E,
I,
J,
K,
G,
H,
D)
Ancestors
of
a
node:
parent,
grandparent,
grand-grandparent,
etc.
B
C
D
Depth
of
a
node:
number
of
ancestors
Height
of
a
tree:
maximum
depth
of
any
node
(3)
E
F
G
H
Descendant
of
a
node:
child,
grandchild,
grand-grandchild,
etc.
I
J
K
subtree
9
Profundidade
Profundidade
de
v
o
nmero
de
ancestrais
de
v
excluindo
o
prprio
Algoritmo
depth(T,
v);
se
v
a
raiz
de
T
ento
retorne
0
seno
retorne
1
+
depth(T,
w),
onde
w
so
os
pais
de
v
em
T
10
Altura
Se
v
um
nodo
externo,
ento
a
altura
de
v
0
Em
qualquer
outro
caso,
a
altura
de
v
um
mais
a
altura
mxima
dos
lhos
de
v
Algoritmo
altura1(T);
h
<-
0
para
cada
vr-ce
v
em
T
faa
se
v
um
nodo
externo
de
T
ento
h
<-
Max(h,
depth(T,
v))
retorne
h
11
Tipos
de
rvores
rvores
binrias
Cada
n
tem
no
mximo
dois
lhos
12
rvores
binrias
uma
rvores
com
as
seguintes
propriedades
Cada
n
interno
possui
ao
menos
dois
lhos
(exatamente)
Um
lho
de
um
n
um
par
ordenado
Filho
a
direita
e
a
esquerda
D
E
F
G
Aplicaes
Expresses
aritm-cas
Processos
decisrios
Busca
A
I
13
3
b
14
rvore
de
Deciso
rvore
binria
associada
a
processos
decisrios
Nodos
internos:
questes
com
respostas
sim
ou
no
Nodos
externos:
decises
Yes
How
about
coee?
No
On
expense
account?
Yes
Starbucks
No
Spikes
Yes
Al
Forno
No
Caf
Paragon
15
16
17
Por induo,
0$1
' 2 #2
j j# 0
"
d$1
%1
Assim, tambm possvel determinar a profundidade da rvore Assim, tambm possvel determinar a binria dado a quantidade de ns
18
19
Representao
de
um
N
Um
nodo
para
uma
rvore
binria
deve
Representao de um Nodo conter:
! Um ampo
DADOS
rvore binria deve conter: Um
c nodo para uma " Um campo DADOS Um
ponteiro
para
o
N
Filho
ESQUERDO
" Um ponteiro para o Nodo Filho ESQUERDO Um
Um ponteiropara
oNodo Filho
DIREITO
" ponteiro
para o
N
Filho DIREITO " Um
Um ponteiropara
oNodo PAI
ponteiro
para o
N
PAI
nodo
esq
dados
pai
dir
20
Operaes
Bsicas
Existem
vrias
operaes
possveis
com
rvores
binrias,
porm
as
mais
comuns
so:
info(p):
retorna
o
contedo
do
n
p
esquerdo(p)
ou
le(p):
retorna
o
lho
esquerdo
de
p
ou
None
caso
no
exista
lho
esquerdo
direito(p)
ou
right(p):
retorna
o
lho
direito
de
p
ou
None
caso
no
exista
lho
direito
pai(p)
ou
father(p):
retorna
o
pai
de
p
ou
None
caso
no
exista
pai
irmao(p)
ou
brother(p):
retorna
o
irmo
de
p
ou
None
caso
no
exista
irmo
ehEsquerdo(p)
ou
isle(p):
retorna
TRUE
se
p
lho
esquerdo
do
seu
pai
e
FALSE
caso
contrrio
ehDireito(p)
ou
isright(p):
retorna
TRUE
se
p
lho
direito
do
seu
pai
e
FALSE
caso
contrrio
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
21
Operaes
Bsicas
As
funes
para
retorno
de
lhos
esquerdo
e
direito,
pai
e
contedo
so
triviais:
def
getInfo(p):
return
self.dado
def
getLe(p):
return
self.esq
def
getRight(p):
return
self.dir
def
getFather(p):
return
self.pai
Onde
p
um
ponteiro
para
um
n
da
rvore!
22
Operaes
Bsicas
U-lizando
as
funes
getLe(p),
getRight(p)
e
getFather(p)
possvel
escrever
as
demais
funes:
Funo
isle(p):
lho
esquerdo?
... ! q = getFather(p) ! if q == none:! return false; #quando p aponta para raiz if getLeft(q)==p:! return true ! return false!
23
Operaes
Bsicas
Funo
isright(p):
lho
direito?
...! q = getFather(p) ! if q == null:! return false #quando p aponta para raiz! if getRight(q)==p: ! return true! return false!
24
Operaes
Bsicas
Funo
brother(p):
retorna
irmo
de
p
...! if getFather(p) == null:! return false #quando p aponta para raiz! if isleft(p): ! return getRight(getFather(p))! return getLeft(getFather(p))!
25
Exerccio
de
xao
Ao
ler
o
primeiro
nmero
da
lista,
crie
uma
rvore
binria:
Este
nmero
o
n
raiz
26
27
Caminhamento
pr-xado
Caminhamento
a
visita
aos
ns
de
uma
rvore
de
maneira
sistem-ca
No
caminhamento
pr-xado,
um
n
visitado
antes
dos
seus
decendentes
Aplicao:
imprimir
a
estrutura
de
um
documento
1
2
1.
Mo-va-ons
5
2.
Methods
3
1.1
Greed
4
1.2
Avidity
6
2.1
Stock
Fraud
7
2.2
Ponzi
Scheme
28
Caminhamento
ps-xado
No
caminhamento
ps-xado,
o
n
e
visitado
aps
os
seus
decendentes
Algoritmo postOrder(v) for each child w of v Aplicao:
calcular
o
espao
postOrder (w) ocupado
por
arquivos
em
um
visit(v) diretrio
e
subdiretrios
7
3
homeworks/
cs16/
6
programs/
1
h1c.doc
3K
2
h1nc.doc
2K
4
DDR.java
10K
5
Stocks.java
25K
Algoritmos
e
Estrutura
de
Dados
rvores
2011
Vinicius
Cardoso
Garcia
29
Caminhamento
interxado
Em
um
caminhamento
interxado
um
n
visitado
aps
a
sua
sub-rvore
a
esquerda
e
antes
da
sua
sub- rvore
direita
Aplicao:
desenhe
uma
rvore
binria
x(v)
=
inorder
rank
of
v
y(v)
=
depth
of
v
Algoritmo inOrder(v) if hasLeft (v) inOrder (left (v)) visit(v) if hasRight (v) inOrder (right (v))
8
2 1 3 4 5 7
30
+
2
a
-
1
3
b
Algorithm printExpression(v) if hasLeft (v) print(() inOrder (left(v)) print(v.element ()) if hasRight (v) inOrder (right(v)) print ())
31
3
2
32
AJvidades
Complementares
Leitura
da
seo
10.4
do
livro
do
Cormen
Implemente
uma
classe
rvore
binria
Implemente
a
aplicao
proposta
para
avaliao
de
expresses
aritm-cas
Considere
o
uso
de
parnteses
33