Você está na página 1de 33

rvores

Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br

2011 Vinicius Cardoso Garcia

O que uma rvore?


Na cincia da computao, uma rvore um modelo abstrato de uma estrutura hierrquica Uma rvore consiste de ns com uma relao de US parentesco Aplicaes:
Organiza-onal charts Europe Sistemas de arquivos Ambientes de programao
ComputersRUs

Sales

Manufacturing

R&D

Interna-onal

Laptops

Desktops

Asia

Canada

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

11

Tipos de rvores
rvores binrias
Cada n tem no mximo dois lhos

rvore com nmero varivel de lhos


Cada n pode ter vrios lhos

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

rvores para Expresso AritmJca


rvores binrias associada a uma expresso aritm-ca
Nodos internos: operadores Nodos externos: operandos

Exemplo: rvore de expresso aritm-ca para expresso (2 (a - 1) + (3 b))


+

2 a -
1
Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia


3 b

14

rvore de Deciso
rvore binria associada a processos decisrios
Nodos internos: questes com respostas sim ou no Nodos externos: decises

Exemplo: deciso de jantar


Want a fast meal?

Yes
How about coee?

No
On expense account?

Yes
Starbucks

No
Spikes

Yes
Al Forno

No
Caf Paragon
15

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

Propriedades de rvores Binrias


Notao
n nmero de nodos e nmero de nodos externos i nmero de nodos internos h altura
"
Propriedades: n e = i + 1 n n = 2e - 1 n h i n h (n - 1)/2 n e 2h n h log2 e n h log2 (n + 1) - 1

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

16

Mais observaes Mais Observaes...


! Se ma rvore binria con-ver m ns no nvel Se u uma rvore binria contiver m ns no nvel l, o nvel l+1 conter n conter no l, ento nento no nvel l+1 o mximo 2m mximo 2m ns ns
" Assim,o nvel l uma rvore poder conter no no Assim, n no nvel l uma rvore poder conter l mximo ns mximo 2l 2 " Logo,ma rvore binria completa de de Logo, u uma rvore binria completa profundidade d conter mximo um um total profundidade d conter no no mximo total de de ns (tn), ns (tn),

tn#2 $2 $2 $%$2 # & 2


0 1 2 d j#0
Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

17

Mais bservaes Observaes... Mais o


Por induo,
!

Por induo,

2 #2 %1#1 0 1 1$1 2 $2 #2 %1#3 0 1 2 2$1 2 $2 $2 #2 %1#7 &

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

profundidade da rvore binria dado a quan-dade de ns


Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

18

rvore Completa e Quase-Completa


Uma rvore binria completa quando todos os pais tm dois lhos (esquerdo e direito) Uma rvore binria quase completa quando:
Cada folha da rvore es-ver no nvel d ou no nvel d-1 Para cada n nd na rvore com um descendente direito no nvel d, todos os descendentes esquerdos de nd que forem folhas es-verem tambm no nvel d.
Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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!

Mas, e as demais funes, como implement- las?


Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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!

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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!

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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))!

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

25

Exerccio de xao
Ao ler o primeiro nmero da lista, crie uma rvore binria:
Este nmero o n raiz

Ao ler o segundo nmero da lista, compare com a rvore,


Se for igual ao n atual, temos uma repe-o; Se for maior que o n atual, v para o lho direito e repita a comparao; Se for menor que o n atual, v para o lho da esquerda e repita a comparao
Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

26

Percorrendo uma rvore


Operao de percorrer uma rvore:
o ato de caminhar sobre a rvore enumerando cada um dos seus ns uma vez
dito visitar um n a medida que ele enumerado No existe uma ordem natural para se visitar os ns de uma rvore! possvel citar trs mtodos:
Pr-ordem ou profundidade ou caminhamento pr-xado Em ordem ou ordem simtrica ou caminhamento inter-xado Ps-ordem ou caminhamento ps-xado

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmo preOrder(v) visit(v) for each child w of v preorder (w)

Make Money Fast!

5
2. Methods

3
1.1 Greed

4
1.2 Avidity

6
2.1 Stock Fraud

7
2.2 Ponzi Scheme
28

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

30

Impresso de Expresses AritmJcas


Especializao do caminhamento interxado
Imprime operando ou operador quando visita o n imprime ( antes de caminhar na subrvore esquerda imprime ) aps caminhar na sub-rvore direita

+

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 ())

((2 (a - 1)) + (3 b))


Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

31

Avaliando Expresses AritmJcas


Especializao do caminhamento ps-xado Algorithm evalExpr(v) if isExternal (v) Mtodo recursivo retornando return v.element () o valor da sub-rvore else Quando visitar um n interno, x evalExpr(leftChild (v)) combine o valor das sub- y evalExpr(rightChild (v)) rvores operator stored at v +
return x y

2 5 -
1
Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia


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

Algoritmos e Estrutura de Dados rvores 2011 Vinicius Cardoso Garcia

33

Você também pode gostar