Алгоритм, который использует рекурсию, идет как это:
printNode(Node node)
{
printTitle(node.title)
foreach (Node child in node.children)
{
printNode(child); //<-- recursive
}
}
Вот версия, которая также отслеживает то, как глубоко вложенный рекурсия (т.е. печатаем ли мы детей корня, внуков, правнуков, и т.д.):
printRoot(Node node)
{
printNode(node, 0);
}
printNode(Node node, int level)
{
printTitle(node.title)
foreach (Node child in node.children)
{
printNode(child, level + 1); //<-- recursive
}
}
Ну, Вы могли всегда использовать рекурсию, но в сценарии программирования "реального мира", она может привести к плохим вещам, если Вы не отслеживаете глубину.
Вот пример, используемый для двоичного дерева: http://www.codeproject.com/KB/recipes/BinarySearchTree.aspx
я погуглил бы связанные списки и другие древовидные структуры, если Вы плохо знакомы с целой вещью структуры данных. Существует богатство знания, которое будет иметься.