public bool MoveNext() { if (Current.Children.Count() > 0) { DepthFirstPreOrderTreeNodeWrapper <TNode> firstChild = null; DepthFirstPreOrderTreeNodeWrapper <TNode> prevNode = null; foreach (TNode child in Current.Children) { var wrapper = new DepthFirstPreOrderTreeNodeWrapper <TNode> { Node = child }; if (prevNode != null) { prevNode.Next = wrapper; } else { firstChild = wrapper; } prevNode = wrapper; } prevNode.Next = _current.Next; _current = firstChild; } else { _current = _current.Next; } return(_current != null); }
public void Reset() { _current = _root; }
public DepthFirstPreOrderTreeEnumerator(TNode root) { this._root = new DepthFirstPreOrderTreeNodeWrapper <TNode> { Node = root }; }