I have a TreeView Control with set of nodes and child nodes. For example:
ROOT has A,B,C.
A has a1, a2, a3 and then
I am not the biggest fan of recursion but it seems you must use it. I saw a clever example online mixing recursion with an iterator.
private int GetLevels(TreeNodeCollection treeNodes)
{
int level = 0;
foreach (TreeNode node in TreeTopDown(treeNodes))
{
int i = node.Level;
if (i > level) level = i;
}
return level;
}
//TopDown Iterator
private IEnumerable TreeTopDown(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
yield return node;
foreach (TreeNode subNode in TreeTopDown(node.Nodes)) yield return subNode;
}
}
//BottomUp Iterator
private IEnumerable TreeBottomUp(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
foreach (TreeNode subNode in TreeBottomUp(node.Nodes)) yield return subNode;
yield return node;
}
}