Habe deine Schleife jetzt erst richtig verstanden, bleiben noch die NIL-Stellen...
Delphi-Quellcode:
procedure Node_Delete(Node : TTreeNode);
var NodeObject:TObject;
begin
if assigned(Node) then begin
while Node.HasChildren do
Node_Delete(Node.Item[0]);
{Free the class}
NodeObject:=Node.Data;
if assigned(NodeObject) then
NodeObject.Free;
{Delete the node}
Node.Delete;
end;
end;