public bool MoveNext()
 {
     if (_current == null)
     {
         Reset();
         _current = _tree;
         _enumerators.Enqueue(_current.Children().GetEnumerator());
         return(true);
     }
     while (_enumerators.Count > 0)
     {
         var enumerator = _enumerators.Peek();
         if (enumerator.MoveNext())
         {
             _current = enumerator.Current;
             _enumerators.Enqueue(_current.Children().GetEnumerator());
             return(true);
         }
         else
         {
             _enumerators.Dequeue();
         }
     }
     return(false);
 }
Exemple #2
0
 public bool MoveNext()
 {
     if (_current == null)
     {
         Reset();
         _current = _tree;
         return(true);
     }
     if (_current.LeftChild != null)
     {
         return(TraverseLeft());
     }
     if (_current.RightChild != null)
     {
         return(TraverseRight());
     }
     return(TraverseUpAndRight());
 }
 public void Add(T value)
 {
     if (LeftChild == null)
     {
         LeftChild = new DemoTree <T>(value);
         return;
     }
     if (RightChild == null)
     {
         RightChild = new DemoTree <T>(value);
         return;
     }
     if (LeftChild.Depth() <= RightChild.Depth())
     {
         LeftChild.Add(value);
         return;
     }
     RightChild.Add(value);
 }
Exemple #4
0
 private bool TraverseUpAndRight()
 {
     if (_breadcrumb.Count > 0)
     {
         _previous = _current;
         while (true)
         {
             _current = _breadcrumb.Pop();
             if (_previous != _current.RightChild)
             {
                 break;
             }
         }
         if (_current.RightChild != null)
         {
             _breadcrumb.Push(_current);
             _current = _current.RightChild;
             return(true);
         }
     }
     return(false);
 }
Exemple #5
0
 public void Reset()
 {
     _current = null;
 }
Exemple #6
0
 private bool TraverseRight()
 {
     _breadcrumb.Push(_current);
     _current = _current.RightChild;
     return(true);
 }
Exemple #7
0
 public DemoTreeEnumerator(DemoTree <T> tree)
 {
     _tree = tree;
 }
 public void Reset()
 {
     _current = null;
     _enumerators.Clear();
 }
 public DemoTreeBreadthFirstEnumerator(DemoTree <T> tree)
 {
     _tree = tree;
 }