Professional Documents
Culture Documents
Referncia bibliogrca
Os slides sobre este assunto so parcialmente baseados nas sees sobre rvores do captulo 4 do livro N. Wirth. Algorithms + Data Structures = Programs. Prentice Hall, 1976.
rvore
Uma rvore do tipo T constituda de uma estrutura vazia, ou um elemento ou um n do tipo T chamado raiz com um nmero nito de rvores do tipo T associadas, chamdadas as sub-rvores da raiz.
A d d d d B D C d d d d E F H G d J I K L
d d d d
C A
d d d d
D
Numa rvore que representa os descendentes de uma famlia real, a ordem das subrvores pode ser importante pois pode determinar a ordem de sucesso da coroa.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
d d d d
C
E I
d d
J
G L
d d
Pai e lho: Um n y abaixo de um n x chamado lho de x . x dito pai de y . Exemplo: B pai de E e F. Irmo: Ns com o mesmo pai so ditos irmos. Exemplo: B, C, D so irmos. Nvel de um n: A raiz de uma rvore tem nvel 1. Se um n tem nvel i , seus lhos tm nvel i + 1. Exemplo: E, F, G e H tm nvel 3.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
d d d d
C
E I
d d
J
G L
d d
Altura ou profundidade de uma rvore: o mximo nvel de seus ns. A rvore do exemplo tem altura 4. Folha ou n terminal: um n que no tem lhos. Exemplo: I, J, K, L so folhas. N interno ou n no terminal: um n que no folha. Grau de um n: o nmero de lhos do n. Exemplo: B tem grau 2, G tem grau 1.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
d d d d
C
E I
d d
J
G L
d d
Grau de uma rvore: o mximo grau de seus ns. A rvore do exemplo tem grau 3.
Usando a nomenclatura vista, podemos denir a rvore binria. rvore binria: uma rvore ordenada de grau 2.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
rvore binria
Uma rvore binria vazia ou um n chamado raiz mais duas rvores binrias disjuntas chamadas subrvore esquerda e subrvore direita. Exemplo * d d d d + d d e f
Pode representar a expresso aritmtica:
/ d d + d d a b c d
((a + b) /(c d )) (e + f ) Veja como a estrutura de rvore binria expressa de maneira clara a precedncia das operaes, sem necessidade de usar parntesis.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Vamos fazer um pequeno exerccio: construir uma rvore binria constituda de n ns, para um dado n, que tenha mnima altura. Para isso, vamos alocar o mximo numero possvel de ns em cada nvel da rvore, exceto no ltimo que pode estar incompleto. Podemos distribuir ns em igual quantidade para a esquerda e a direita de cada n. Teremos uma rvore perfeitamente balanceada.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Aloque um n para ser a raiz. Coloque na esquerda da raiz uma rvore gereada por tree(nl = n div 2). Coloque na direita da raiz uma rvore gereada por tree(nr = n nl 1).
n=1
n=2
d d d d
n=3
d d d n=4 d
d d d d n=5
d d d d d d n=6
d d d d d n=7 d d d
type ref = node; node = record key: integer; left, right: ref end; var n: integer; root: ref; function tree(n: integer): ref; var newnode: ref; x, nl, nr: integer; begin { constri uma rvore perf. balanceada de n ns} if n = 0 then tree:=nil else begin nl:= n div 2; nr:= n - nl - 1; read(x); new(newnode); begin newnode.key:=x; newnode.left:=tree(nl); newnode.right:=tree(nr) end; tree:=newnode end end
Vistar a raiz. Percorrer a sua subrvore esquerda em pr-ordem. Percorrer a sua subrvore direita em pr-ordem.
Vistar a raiz. Percorrer a sua subrvore esquerda em pr-ordem. Percorrer a sua subrvore direita em pr-ordem.
A d d d B D d C d d E F d d I G H
Percurso em pr-ordem: A B D C E G F H I
O percurso em pr-ordem segue os ns at chegar os mais profundos, em ramos de subrvores da esquerda para a direita. conhecida usualmente pelo nome de percurso em profundidade (depth-rst).
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Vistar a raiz. Percorrer a sua subrvore esquerda em pr-ordem. Percorrer a sua subrvore direita em pr-ordem.
A d d d B D d C d d E F d d I G H
Percurso em pr-ordem: A B D C E G F H I
O percurso em pr-ordem segue os ns at chegar os mais profundos, em ramos de subrvores da esquerda para a direita. conhecida usualmente pelo nome de percurso em profundidade (depth-rst).
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
type ref = node; node = record key: integer; left, right: ref end; procedure pre-order(t: ref); begin if t = nil then begin visita(t); pre-order(t.left); pre-order(t.right); end end
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Percorrer a sua subrvore esquerda em in-ordem. Vistar a raiz. Percorrer a sua subrvore direita em in-ordem.
A in-ordem visita a raiz entre as aes de percorrer as duas subrvores. conhecida tambm pelo nome de ordem simtrica.
Percorrer a sua subrvore esquerda em in-ordem. Vistar a raiz. Percorrer a sua subrvore direita em in-ordem.
A d d d B D d C d d E F d d I G H
Percurso em in-ordem: D B A E G C H F I
type ref = node; node = record key: integer; left, right: ref end; procedure in-order(t: ref); begin if t = nil then begin in-order(t.left); visita(t); in-order(t.right); end end
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Percorrer a sua subrvore direita em in-ordem. Vistar a raiz. Percorrer a sua subrvore esquerda em in-ordem. A rvore impressa: A C
d
B D
d d d
E B D C
d d
type ref = node; node = record key: integer; left, right: ref end; procedure print-tree(t: ref; h: integer); var i: integer; begin {imprime rvore t com indentao h} if t = nil then begin print-tree(t.right, h+1); for i:= 1 to h do write( ); writeln(t.key); print-tree(t.left, h+1); end end
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Percorrer a sua subrvore esquerda em ps-ordem. Percorrer a sua subrvore direita em ps-ordem. Vistar a raiz.
Percorrer a sua subrvore esquerda em ps-ordem. Percorrer a sua subrvore direita em ps-ordem. Vistar a raiz.
A d d d B D d C d d E F d d I G H
Percurso em ps-ordem: D B G E H I F C A
Percorrer a sua subrvore esquerda em ps-ordem. Percorrer a sua subrvore direita em ps-ordem. Vistar a raiz.
Exemplo
* d d d d + d d e f
/ d d + d d a b c d
Percurso em ps-ordem: a b + c d / e f +
A representao de uma expresso aritmtica com o operador no nal dos operandos conhecida pelo nome de notao reversa ou polonesa.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Percorrer a sua subrvore esquerda em ps-ordem. Percorrer a sua subrvore direita em ps-ordem. Vistar a raiz.
Exemplo
* d d d d + d d e f
/ d d + d d a b c d
Percurso em ps-ordem: a b + c d / e f +
A representao de uma expresso aritmtica com o operador no nal dos operandos conhecida pelo nome de notao reversa ou polonesa.
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
type ref = node; node = record key: integer; left, right: ref end; procedure post-order(t: ref); begin if t = nil then begin post-order(t.left); post-order(t.right); visita(t); end end
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias
Percurso em largura
H ainda outras formas usuais para percorrer uma rvore. Percurso em largura ou em nvel (breadth-rst): percorre a rvore em ordem crescente de seus nveis e, em cada nvel, da esquerda para a direita. Uma la usada para realizar este percurso.
A d d d B D d C d d E F d d I G H
Percurso em largura: A B C D E F G H I
Siang Wun Song - Universidade de So Paulo - IME/USP rvores e rvores Binrias