Call a function f on every node of a tree, in breadth-first prefix order
func (root *Tree) Bfs(f func(*Tree)) { if root == nil { return } queue := []*Tree{root} for len(queue) > 0 { t := queue[0] queue = queue[1:] f(t) queue = append(queue, t.Children...) } }
def BFS(f, root): Q = [root] while Q: n = Q.pop(0) f(n) for child in n: if not n.discovered: n.discovered = True Q.append(n)
use std::collections::VecDeque;
struct Tree<V> { children: Vec<Tree<V>>, value: V } impl<V> Tree<V> { fn bfs(&self, f: impl Fn(&V)) { let mut q = VecDeque::new(); q.push_back(self); while let Some(t) = q.pop_front() { (f)(&t.value); for child in &t.children { q.push_back(child); } } } }
No security, no password. Other people might choose the same nickname.