[][src]Function traversal::bft

pub fn bft<'a, T, F, I>(root: &'a T, iter_children: F) -> Bft<'a, T, F, I> where
    T: ?Sized,
    F: FnMut(&'a T) -> I,
    I: Iterator<Item = &'a T>, 

This is a shorthand for Bft::new, see Bft for more information.

Example

struct Node(&'static str, &'static [Node]);

let tree = Node("A", &[
    Node("B", &[
        Node("D", &[]),
        Node("E", &[])
    ]),
    Node("C", &[
        Node("F", &[]),
        Node("G", &[])
    ]),
]);

// `&tree` represents the root `Node`.
// The `FnMut(&Node) -> Iterator<Item = &Node>` returns
// an `Iterator` to get the child `Node`s.
let iter = traversal::bft(&tree, |node| node.1.iter());

// Map `Iterator<Item = &Node>` into `Iterator<Item = &str>`
let mut iter = iter.map(|(depth, node)| (depth, node.0));

assert_eq!(iter.next(), Some((0, "A")));
assert_eq!(iter.next(), Some((1, "B")));
assert_eq!(iter.next(), Some((1, "C")));
assert_eq!(iter.next(), Some((2, "D")));
assert_eq!(iter.next(), Some((2, "E")));
assert_eq!(iter.next(), Some((2, "F")));
assert_eq!(iter.next(), Some((2, "G")));
assert_eq!(iter.next(), None);