Показать сообщение отдельно
Старый 29.07.2015, 16:18   #9  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
В первом куске кода получается ноль потому, что сначала Вы узел удаляете, а потом для удаленного узла пытаетесь получить следующий на том же уровне. Нужно это делать перед удалением, т.к. idx удаленного узла становится недействительным.

Что есть "пустая нода"? Та, у которой нет дочерних? Ведь этак проще всего просто удалить все элементы, т.к. удаляя "пустую" по такому критерию на разных уровнях, постепенно придем к тому, что все будут пустыми.

Все элементы можно обойти рекурсивно (об этом писали выше):
X++:
void iterate(TreeItemIdx _idx)
{
    while (idx)
    {
         // ...
         iterate(tree.getChild(_idx));
         // ...
         _idx = tree.getNextSibling(_idx);
    }
}
;

iterate(tree.getRoot());