/// <summary> /// Breadth-first walk of the tree /// </summary> /// <param name="visit">Visit type delegate</param> public void WalkTree(VisitNode visitNode, VisitEdge visitEdge) { Queue <Node> walkingQueue = new Queue <Node>(); for (walkingQueue.Enqueue(this.RootNode); walkingQueue.Count > 0;) { var currentNode = walkingQueue.Dequeue(); visitNode((int)currentNode.Label); foreach (var edge in currentNode.Edges) { walkingQueue.Enqueue(edge.Value.EndNode); visitEdge((int)currentNode.Label, (int)edge.Value.EndNode.Label, edge.Value.Start, NormalizeEndValue(edge.Value.End)); } } }
private void OnVisitEdge(TEdge edge) { Debug.Assert(edge != null); VisitEdge?.Invoke(edge); }
/// <summary> /// Breadth-first walk of the tree /// </summary> /// <param name="visit">Visit type delegate</param> public void WalkTree(VisitNode visitNode, VisitEdge visitEdge) { Queue<Node> walkingQueue = new Queue<Node>(); for (walkingQueue.Enqueue(this.RootNode); walkingQueue.Count > 0; ) { var currentNode = walkingQueue.Dequeue(); visitNode((int)currentNode.Label); foreach (var edge in currentNode.Edges) { walkingQueue.Enqueue(edge.Value.EndNode); visitEdge((int)currentNode.Label, (int)edge.Value.EndNode.Label, edge.Value.Start, NormalizeEndValue(edge.Value.End)); } } }