Skip to content

Instantly share code, notes, and snippets.

@sachanganesh
Created June 2, 2020 17:45
Show Gist options
  • Select an option

  • Save sachanganesh/ef855b0ff67326dbb1f5af2de0f37931 to your computer and use it in GitHub Desktop.

Select an option

Save sachanganesh/ef855b0ff67326dbb1f5af2de0f37931 to your computer and use it in GitHub Desktop.
python-ported immutable preorder traversal in rust (tree_iter)
pub struct PreorderIter {
stack: Vec<&TreeNode>
}
impl PreorderIter {
pub fn new(root: Option<&TreeNode>) -> Self {
if let Some(node) = root {
PreorderIter {
stack: vec![node]
}
} else {
PreorderIter {
stack: vec![]
}
}
}
}
impl Iterator for PreorderIter {
type Item = &TreeNode;
fn next(&mut self) -> Option<Self::Item> {
if let Some(node) = self.stack.pop() {
if let Some(right) = &node.right {
self.stack.push(&right)
}
if let Some(left) = &node.left {
self.stack.push(&left)
}
return Some(node)
}
return None
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment