visitBreadth method

  1. @override
int visitBreadth(
  1. VisitCallback visit, {
  2. Node? startNode,
})
override

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;
}