treeclimber 0.0.1

An iterator that climbs trees.
Documentation
use crate::IndexedClimber;

pub struct Dfs<C: IndexedClimber> {
    climber: C,
    stack: Vec<C::Index>,
}
impl<C: IndexedClimber> Dfs<C> {
    pub fn new(climber: C) -> Self {
        let index = climber.index();

        Self {
            climber,
            stack: vec![index],
        }
    }
}
impl<C: IndexedClimber> Iterator for Dfs<C> {
    type Item = C::Item;
    fn next(&mut self) -> Option<Self::Item> {
        let index = self.stack.pop()?;
        let item = self.climber.go_to(&index)?;
        self.stack.extend(self.climber.child_indices().rev());
        Some(item)
    }
}