Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.icmc.usp.br/~sce182/arvbinba.html
ndice > rvore > rvore Binria > rvore Balanceada e rvore Perfeitamente Balanceada
Instituto de Cincias Matemticas de So Carlos Departamento de Computao e Estatstica SCE182 - Algoritmos e Estruturas de Dados 1 Profs. Resp.: Graa Pimentel e Maria Cristina
http://www.icmc.usp.br/~sce182/arvbinba.html
rvore Perfeitamente Balanceada a rvore com menor altura para o seu nmero de ns. Procedimento recursivo para gerao balanceada de ns: 1. Use um n para a raiz. 2. Gere a subrvore esquerda com nl = n div 2 ns, usando este mesmo procedimento. 3. Gere a subrvore direita com nr = n - nl - 1 ns, usando este mesmo procedimento.
Program Buildtree(input, output); 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 If n=0 Then tree:=nil; Else Begin nl:=n div 2; nr:=n - nl -1; read(x); { contedo do n } new (newnode); with newnode^ do Begin key:=x; left:=tree(nl); right:=tree(nr); End; tree:=newnode; End; End; {tree} Duas possibilidades: in-order (verso em verde) in-order "invertido" (isto , caminhando direita primeiro) (verso em vermelho) Procedure Printtree(t: ref; h: integer); Var i: integer; {pre-condio: h deve ser a altura da rvore}
2 de 3
03/09/2011 23:18
http://www.icmc.usp.br/~sce182/arvbinba.html
{pre-condio: h deve ser a distncia da margem ao primeiro elemento impresso} Begin {imprime tree t com indentao h} If t<>nil Then with t^ do Begin printtree(left, h-1); printtree(right, h+1); for i:=1 to h do write(' '); writeln(key); printtree(right, h-1);printtree(right, h+1); End; End; {printtree); Begin read(n); root:=tree(n); printtree(root, h(root)); End; { buildtree} {buildtree: programa principal} { primeiro inteiro especIfica nmero de ns } {h a funo que determina a altura da rvore}
-> Exerccio: re-escrever o print-tree para imprimir a rvore em p, fazendo a travessia por nveis.
3 de 3
03/09/2011 23:18