public IEnumerable<Topic> Descendents() { foreach (Topic childNode in Children) { yield return childNode; foreach (Topic descendent in childNode.Descendents()) { yield return descendent; } } }