Exemplo n.º 1
0
 private void Enter(ITree <TNode> current)
 {
     if (IsChildOfLastEnteredNode(current))
     {
         _nodeVisitor.OnEnter(current, this);
     }
     else
     {
         TraverseTreeTo(current);
     }
     _lastEntered = current;
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 public void OnEnter(ITree <TNode> node, ITreeSearchContinuation treeSearchContinuation)
 {
     _first.OnEnter(node, treeSearchContinuation);
     _second.OnEnter(node, treeSearchContinuation);
 }
Exemplo n.º 5
0
 private void Enter(ITree <T> tree)
 {
     _nodeVisitor.OnEnter(tree, null);
 }