void bfs(Node& root, std::function<void(Node*)> f) {
std::deque<Node*> node_queue;
node_queue.push_back(&root);
while (!node_queue.empty()) {
Node* const node = node_queue.front();
node_queue.pop_front();
f(node);
for (Node* const child : node->children) {
node_queue.push_back(child);
}
}
}
static void breadthFirstSearch(Node root, Consumer<Node> f) {
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
Node polled = queue.poll();
f.accept(polled);
polled.children.forEach(a -> queue.offer(a));
}
}
sub bft {
my ($f, $node) = @_;
my @children = $node->getAllChildren;
return unless @children;
foreach my $child ( @children ) {
$f->( $child->getNodeValue );
}
foreach my $child ( @children ) {
bft($f, $child);
}
}
my $f = sub { print $_[0], "\n" };
# create a tree and populate it, then call bft()
bft($f, $tree);