visitBreadth method

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

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