[−][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);