Uma árvore binária é dita balanceada se, para cada nó, as alturas de suas subárvores diferem de, no máximo 1.
Árvore Binária Perfeitamente Balanceada
Uma árvore binária é dita perfeitamente balanceada se, para cada nó, o número de nós de suas subárvores diferem de no máximo, 1.
Árvore Perfeitamente Balanceada é a árvore com menor altura para o seu número de nós.
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); { conteúdo 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 (versão em verde)
in-order "invertido" (isto é, caminhando à direita primeiro)
(versão em vermelho)
Procedure Printtree(t: ref; h: integer);
Var i: integer;
{pre-condição: h deve ser a altura da árvore}
{pre-condição: h deve ser a distância da margem ao primeiro elemento impresso}
Begin {imprime tree t com indentação 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 {buildtree: programa principal}
read(n); { primeiro inteiro especIfica número de nós }
root:=tree(n);
printtree(root, h(root)); {h é a função que determina a altura da árvore}
End; { buildtree}
-> Exercício: re-escrever o print-tree para imprimir a árvore em pé, fazendo a
travessia por níveis.