Skip to content

Instantly share code, notes, and snippets.

@Gankra
Created July 9, 2014 15:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Gankra/aab30073fbaea499f72b to your computer and use it in GitHub Desktop.
Save Gankra/aab30073fbaea499f72b to your computer and use it in GitHub Desktop.
fn splay (&mut self, node: &mut Node<T>) {
enum SplayType {NoSplay, Zig, ZigZig, ZigZag};
loop {
let splayType = match node.get_parent() {
None => NoSplay,
Some(parent) => {
match parent.get_parent() {
None => Zig,
Some(_) => {
if parent.is_left() == node.is_left() {
ZigZig
} else {
ZigZag
}
}
}
}
};
match splayType {
NoSplay => return,
Zig => self.rotate_up(node),
ZigZag => {
self.rotate_up(node);
self.rotate_up(node);
}
ZigZig => {
self.rotate_up(node.get_parent_mut().unwrap());
self.rotate_up(node)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment