No, está bien... habría que ver qué hace el ArbolVacío(), porque quizás estés con un problema ahí.. pero hasta ahora está perfecto.Definitivamente faltaba ese A<>nil y queda bastante elegante.
Sobre pasar los punteros por valor, Pascal hace una copia del puntero en esa variable. Si hacés un Dispose(ptr), entonces esa memoria se libera, y el puntero pasa a ser nil... pero el puntero original, todavía está apuntando a una zona de memoria, que ya fue liberada, por ende, cuidado con eso.
Es preferible pasarlos siempre por referencia, de modo que siempre se trabaje con el mismo puntero... Bah, por lo menos así pienso yo.
---
Te incluyo como lo haría yo, usaría sólo un procedimiento.Código: Text
procedure VaciarArbol(var A: Arbol); begin if A <> nil then begin VaciarArbol(A^.HI); VaciarArbol(A^.HD); Dispose(A); end; end;
Sólo porque pasaba.. xD
Gracias por responder. Me quedo claro. En cuanto al que hacer arbolVacio(a) simplemente esto: ArbolVacio:=(A=nil) no lo escribi porque me parecio bastante claro, pero buh... :DPues no es nada claro. Ese "ArbolVacio" podría bien hacer barbaridad y media, o recorrer todo el arbol recursivamente o quien sabe que podría hacer.
Como sea gracias.