public IEnumerable <INode> Traverse(OtherNode otherNode) { yield return(otherNode); var residents = otherNode.GetResidents(); foreach (var resident in residents) { var nodes = this.TraverseOnceResolved(resident); foreach (var node in nodes) { yield return(node); } } }