Рекурсивно удалять узлы дерева, от последнего дочернего узла к корню

У меня есть TreeView, который пуст при запуске приложения. Узлы добавляются динамически, и для каждого узла я помещаю его тег в словарь.

Теперь, если у меня много длинных ветвей узлов и я удалю корневой узел и его тег из словаря, то, конечно, теги дочерних узлов останутся в словаре.

Итак, я попробовал это:

foreach(TreeNode tn in treeView.SelectedNode.Nodes)
{
    dictionary.Remove((string)tn.Tag); // remove all respective keys
}
dictionary.Remove((string)treeView.SelectedNode.Tag); // remove the selected node's key
treeView.Nodes.Remove(treeView.SelectedNode); // remove the selected node itself

Но это удаляет только выбранный узел и первый дочерний узел. Есть ли способ сделать это рекурсивно, от вершины дерева к корню, чтобы каждый ключ был безопасно удален?


person betaFlux    schedule 21.10.2014    source источник
comment
Зачем нужен словарь?   -  person Renatas M.    schedule 21.10.2014
comment
@Reniuz Очевидно, чтобы отслеживать, какие узлы создаются, а какие удаляются пользователем, поскольку деревья представляют собой некую структуру диалога, где каждый ключ в словаре содержит соответствующую информацию ввода/вывода.   -  person betaFlux    schedule 21.10.2014
comment
Значит, твой словарь — зеркало дерева? Так почему бы не хранить данные, относящиеся к узлу, в теге узла?   -  person Renatas M.    schedule 21.10.2014
comment
Что ж, крутая идея! Я посмотрю на это. Спасибо!   -  person betaFlux    schedule 21.10.2014


Ответы (1)


person    schedule
comment
Работает как шарм! Спасибо! - person betaFlux; 21.10.2014