visitBreadth method
Implementation
@override
int visitBreadth(VisitCallback visit, {Node? startNode}) {
final origin = startNode ?? subtreeRoot;
if (!_subtreeNodes.contains(origin)) {
throw StateError('Node "${origin.key}" is not in the subtree');
}
final queue = Queue<_NodeWithLevel>()..add(_NodeWithLevel(origin, 0));
var lastLevel = -1;
while (queue.isNotEmpty) {
final current = queue.removeFirst();
lastLevel = current.level;
if (visit(current.node) == VisitResult.breakVisit) return current.level;
for (final child in getNodeEdges(current.node)) {
queue.add(_NodeWithLevel(child, current.level + 1));
}
}
return lastLevel;
}