Você está na página 1de 3

rvore Balanceada e rvore Perfeitamente Balanceada

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

rvore Balanceada e rvore Perfeitamente Balanceada


rvore Binria Balanceada Uma rvore binria dita balanceada se, para cada n, as alturas de suas subrvores diferem de, no mximo 1. rvore Binria Perfeitamente Balanceada Uma rvore binria dita perfeitamente balanceada se, para cada n, o nmero de ns de suas subrvores diferem de no mximo, 1.

Altura de rvore Perfeitamente Balanceada


1 de 3 03/09/2011 23:18

rvore Balanceada e rvore Perfeitamente Balanceada

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

rvore Balanceada e rvore Perfeitamente Balanceada

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.

Rebalanceamento de rvores ndice

3 de 3

03/09/2011 23:18

Você também pode gostar