private void Enter(ITree <TNode> current) { if (IsChildOfLastEnteredNode(current)) { _nodeVisitor.OnEnter(current, this); } else { TraverseTreeTo(current); } _lastEntered = current; }
public static IEnumerable <ITree <T> > TraverseDfs <T>(this ITree <T> tree, ISearchNodeVisitor <T> visitor, int depth) { if (depth == 0) { yield break; } visitor.OnEnter(tree, null); yield return(tree); foreach (var child in tree.Children.SelectMany(child => child.TraverseDfs(visitor, depth - 1))) { yield return(child); } visitor.OnLeave(tree, null); }
private void ContinueSearch <TTree>(TTree tree) where TTree : ITree <TNode> { _nodeVisitor.OnEnter(tree, this); if (false == _stopSearch && false == _dontEnterChildren) { foreach (var child in tree.Children) { if (_dontEnterNeighbours) { break; } Run(child); } _dontEnterNeighbours = false; } _nodeVisitor.OnLeave(tree, this); _dontEnterChildren = false; }
public void OnEnter(ITree <TNode> node, ITreeSearchContinuation treeSearchContinuation) { _first.OnEnter(node, treeSearchContinuation); _second.OnEnter(node, treeSearchContinuation); }
private void Enter(ITree <T> tree) { _nodeVisitor.OnEnter(tree, null); }