This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
while((parent = node->parent)) {
if(!(grandparent = parent->parent)) { /* zig */
if(node == parent->left) {
while((parent = node->parent)) {
if(!(grandparent = parent->parent)) { /* zig */
if(node == parent->left) {
greatgrandparent = grandparent->parent;
if(node == parent->left && parent == grandparent->left) { /* left zig-zig */
greatgrandparent = grandparent->parent;
if(node == parent->left && parent == grandparent->left) { /* left zig-zig */
node->right = grandparent;
grandparent->parent = node;
} else { /* right-left zig-zag */
node->right = grandparent;
grandparent->parent = node;
} else { /* right-left zig-zag */
node->left = grandparent;
grandparent->parent = node;
}
if((node->parent = greatgrandparent)) {
node->left = grandparent;
grandparent->parent = node;
}
if((node->parent = greatgrandparent)) {
void splay_insert_top(splay_tree_t *tree, splay_node_t *node) {
node->prev = node->next = node->left = node->right = node->parent = NULL;
tree->head = tree->tail = tree->root = node;
void splay_insert_top(splay_tree_t *tree, splay_node_t *node) {
node->prev = node->next = node->left = node->right = node->parent = NULL;
tree->head = tree->tail = tree->root = node;
splay_bottom_up(tree, node);
if(node->prev) {
node->left->parent = NULL;
tree->root = node->left;
splay_bottom_up(tree, node);
if(node->prev) {
node->left->parent = NULL;
tree->root = node->left;