public IEnumerable <SimpleTreeNode <T> > GetPriorityFirstEnumerable(IComparer <SimpleTreeNode <T> > comparer) { var queue = new PriorityQueue <SimpleTreeNode <T> >(comparer); queue.Add(this); while (queue.Count > 0) { GridSolver.MoveCount++; SimpleTreeNode <T> node = queue.Take(); foreach (SimpleTreeNode <T> child in node.Children) { queue.Add(child); if (queue.Count % 1000 == 0) { Log.Debug("Queue size: {QueueSize}", queue.Count); } } yield return(node); } }