Одной из возможных модификаций для этого является использование оператора yield return для предоставления всех узлов дерева в качестве перечислимой коллекции:
private IEnumerable<UltraTreeNode> AllTreeNodes()
{
Queue<UltraTreeNode> queue = new Queue<UltraTreeNode>(ultraTree1.Nodes.OfType<UltraTreeNode>());
while (queue.Count > 0)
{
UltraTreeNode node = queue.Dequeue();
foreach (UltraTreeNode child in node.Nodes)
queue.Enqueue(child);
yield return node;
}
}
Затем вы можете пройти через каждый элемент и выполнить любую обработку, какую захотите (будь то пометить их выбранными или что-то еще):
foreach (var node in AllTreeNodes())
{
// Take whatever action is needed
//
node.Selected = true;
}