[][src]Function traversal::dft_post_rev

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

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

Example

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

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

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