Tree traversal: Difference between revisions

Content added Content deleted
Line 10,328: Line 10,328:
let mut stack: Vec<&TreeNode<T>> = Vec::new();
let mut stack: Vec<&TreeNode<T>> = Vec::new();
let mut res: Vec<&TreeNode<T>> = Vec::new();
let mut res: Vec<&TreeNode<T>> = Vec::new();
let mut option_tree = Some(self);
let mut opt = Some(self);
while {
while {
// Descend leftwards
// Descend leftwards
while let Some(tree) = option_tree {
while let Some(tree) = opt {
stack.push(tree);
stack.push(tree);
option_tree = tree.left.as_deref();
opt = tree.left.as_deref();
}
}
!stack.is_empty()
!stack.is_empty()
Line 10,340: Line 10,340:
let tree = stack.pop().unwrap();
let tree = stack.pop().unwrap();
res.push(tree);
res.push(tree);
option_tree = tree.right.as_deref();
opt = tree.right.as_deref();
}
}
res
res