Ну, у меня как-то обходится без рекурсии для дерева. В древовидную структуру добавил еще поля order, level. Стандартная рекурсивная процедура используется для update этой таблицы при создании/валидации. Поддерево выбирается не сверху вниз, а снизу вверх, типа выбрать все элементы, в которых среди родителей есть вершина поддерева. Таким образом задача перебирается не n*n записей, a n*log2(n)
--~--~---------~--~----~------------~-------~--~----~ -~----------~----~----~----~------~----~------~--~---

