1) Escrever o algoritmo de visita em Pré-Ordem utilizando alocação dinâmica mas sem utilizar procedimentos recursivos. Utilizar pilha para saber o endereço da subárvore que resta à direita.
Var A: array[1..max] of Pno; { qual o valor de max ????}
pont, raiz:Pno;
topo: 0..max;
Begin
topo:=0;
pont:=raiz;
acabou:=(raiz=nil);
While not acabou do
Begin
While pont <> nil do
Begin
Processa(pont^.info);
topo:=topo+1;
A[topo]:=pont;
Pont:=pont^.esq;
End;
If (topo <> 0) Then
Begin
pont:=A[topo]^.dir;
topo:=topo-1;
End
Else acabou:=true;
End;
End;
2) Escrever uma função recursiva que calcule a altura de uma árvore binária dada. A altura de uma árvore é igual ao máximo nível de seus nós.
Function h(r:Pno):integer;
Var altE,
altD: integer;
Begin
If r=nil Then
h:=0
Else
Begin
altE:=h(r^.esq);
altD:=h(r^.dir);
h:=max(altE, altD) + 1;
End;
End;