>>511
>      while Items.Count <> 0 do
>      begin //ノードが保持していたデータオブジェクトを確実に廃棄
>        if Items[0].Data <> nil then
>          TMyNode(Items[0].Data).Free;
>        Items.Delete(Items[0]);
>      end;

これ、遅い上に危険。
Items[0].Deleteが Items[0] の子以下も全て削除するから
子の Data が破棄されない。

for i := 0 to Items.Count - 1 do
 TMyNode(Items[i].Data).Free;
Items.Clear

にすれ。