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); }
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); }
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); }
public void Reset() { _current = null; }
private bool TraverseRight() { _breadcrumb.Push(_current); _current = _current.RightChild; return(true); }
public DemoTreeEnumerator(DemoTree <T> tree) { _tree = tree; }
public void Reset() { _current = null; _enumerators.Clear(); }
public DemoTreeBreadthFirstEnumerator(DemoTree <T> tree) { _tree = tree; }