use super::*;
struct IterativeDeallocator<D: Data, T> {
stack: Vec<Box<BasicNode<D, T>>>,
}
impl<D: Data, T> IterativeDeallocator<D, T> {
fn step(&mut self) -> Option<()> {
let node = self.stack.pop()?;
self.push(node.left);
self.push(node.right);
Some(())
}
fn push(&mut self, tree: BasicTree<D, T>) {
if let Some(node) = tree.into_node_boxed() {
self.stack.push(node);
}
}
}
pub fn deallocate_iteratively<D: Data, T>(tree: &mut BasicTree<D, T>) {
let my_tree = std::mem::replace(tree, BasicTree::new());
let mut deallocator = IterativeDeallocator { stack: vec![] };
deallocator.push(my_tree);
while deallocator.step().is_some() {}
}