Bueno, el algoritmo depende básicamente de lo que quieras hacer. Por ejemplo, acá te dejo uno que lo recorde e imprime sus datos en INORDEN.
procedure recorreArbol(a: puntArbol);
begin
if a^.izq <> nil then
recorreArbol(a^.izq);
writeln(a^.datos);
if a^.der <> nil then
recorreArbol(a^.der);
end;
Tan fácil como eso. Obviamente, según lo que necesites hacer, puede que sea iterativo en lugar de recursivo.
Ahora te dejo una modificación de ese, que imprime el número de nivel en el que estás:
procedure recorreArbol(a: puntArbol);
begin
recorreArbol2(a, 0);
end;
procedure recorreArbol2(a: puntArbol; nivel: byte);
begin
if a^.izq <> nil then
recorreArbol2(a^.izq, nivel + 1);
writeln(nivel);
if a^.der <> nil then
recorreArbol2(a^.der, nivel + 1);
end;
Saludos.
Zorri.-