[][src]Function traversal::dft_longest_paths

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

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

Example

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

let tree = Node("A", &[
    Node("B", &[
        Node("C", &[]),
        Node("D", &[])
    ]),
    Node("E", &[
        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::dft_longest_paths(&tree, |node| node.1.iter());

// Map `Iterator<Item = Vec<&Node>>` into `Iterator<Item = Vec<&str>>`
let mut iter = iter.map(|path| path.iter().map(|node| node.0).collect::<Vec<_>>());

assert_eq!(iter.next(), Some(vec!["A", "B", "C"]));
assert_eq!(iter.next(), Some(vec!["A", "B", "D"]));
assert_eq!(iter.next(), Some(vec!["A", "E", "F"]));
assert_eq!(iter.next(), Some(vec!["A", "E", "G"]));
assert_eq!(iter.next(), None);