visitBreadth method
Breadth-first search (BFS)
Walk by nodes levels and returns level of tree where visit stopped.
Implementation
@override
int visitBreadth(VisitCallback visit, {Node? startNode}) {
final visited = <Node, bool>{};
final queue = [startNode ?? root];
int level = -1;
while (queue.isNotEmpty) {
int levelSize = queue.length;
level++;
while (levelSize-- != 0) {
final node = queue.removeAt(0);
if (visited[node] == true) {
continue;
}
visited[node] = true;
final visitResult = visit(node);
if (visitResult == VisitResult.breakVisit) {
return level;
} else {
for (final child in _edges[node] ?? {}) {
if (visited[child] != true) {
queue.add(child);
}
}
}
}
}
return startNode != null ? -1 : level;
}