Figure 6 Implementing a Recursive Iterator
กก
class Node<T>
{
    public Node<T> LeftNode;
    public Node<T> RightNode;
    public T Item;
}
public class BinaryTree<T> 
{
   Node<T> m_Root;
   public void Add(params T[] items)
   {
      foreach(T item in items)
         Add(item);
   }
   public void Add(T item)
   {...}
   public IEnumerable<T> InOrder
   {
      get
      {
         return ScanInOrder(m_Root);
      }
    }
   IEnumerable<T> ScanInOrder(Node<T> root)
   {
      if(root.LeftNode != null)
      {
         foreach(T item in ScanInOrder(root.LeftNode))
         {
            yield return item;
         }
      }

      yield return root.Item;
 
      if(root.RightNode != null)
      {
         foreach(T item in ScanInOrder(root.RightNode))
         {
            yield return item;
         }
      }
   }
}