[][src]Function traversal::dft_pre_rev

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

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

Example

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

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

// `&tree` represents the root `Node`.
// The `FnMut(&Node) -> Iterator<Item = &Node>` returns
// an `Iterator` to get the child `Node`s.
let iter = traversal::dft_pre_rev(&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((2, "A")));
assert_eq!(iter.next(), Some((2, "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((1, "F")));
assert_eq!(iter.next(), Some((0, "G")));
assert_eq!(iter.next(), None);