#include "splaytree.h"
#include <stdlib.h>
#include <string.h>
+#include <stdio.h>
+
+extern void print_tree(node_t* tree);
#ifdef NDEBUG
static
node_t* subleft = &subroots;
node_t* subright = &subroots;
node_t* root = tree->root;
- if (NULL != root) {
- while (1) {
- int cmp = tree->compare(key, root->value);
- if (cmp < 0) {
+
+ while (1) {
+ int cmp = tree->compare(key, root->value);
+ if (cmp < 0) {
+ if (NULL == root->left) break;
+ if (tree->compare(key, root->left->value) < 0) {
+ root = rotate(root, RIGHT);
if (NULL == root->left) break;
- if (tree->compare(key, root->left->value) < 0) {
- root = rotate(root, RIGHT);
- if (NULL == root->left) break;
- }
- subright->left = root;
- subright = root;
- root = root->left;
- } else if (cmp > 0) {
+ }
+ subright->left = root;
+ subright = root;
+ root = root->left;
+ } else if (cmp > 0) {
+ if (NULL == root->right) break;
+ if (tree->compare(key, root->right->value) > 0) {
+ root = rotate(root, LEFT);
if (NULL == root->right) break;
- if (tree->compare(key, root->right->value) < 0) {
- root = rotate(root, LEFT);
- if (NULL == root->right) break;
- }
- subleft->right = root;
- subleft = root;
- root = root->right;
- } else {
- break;
}
+ subleft->right = root;
+ subleft = root;
+ root = root->right;
+ } else {
+ break;
}
}
/* assemble */
subleft->right = root->left;
subright->left = root->right;
- root->left = subroots.right;
- root->right = subroots.left;
+ root->left = subroots.right;
+ root->right = subroots.left;
/* Set the root */
tree->root = root;
{
splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
tree->root = node(42, NULL, node(44, node(43, NULL, NULL), NULL));
- print_tree(tree->root);
void* value = splaytree_lookup(tree, 43);
- print_tree(tree->root);
CHECK((void*)43 == value);
- print_tree(tree->root);
splaytree_destroy(tree);
}
{
splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
tree->root = node(44, node(42, NULL, node(43, NULL, NULL)), NULL);
- print_tree(tree->root);
void* value = splaytree_lookup(tree, 43);
- print_tree(tree->root);
CHECK((void*)43 == value);
- print_tree(tree->root);
splaytree_destroy(tree);
}
{
splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
tree->root = node(42, NULL, node(43, NULL, node(45, node(44, NULL, NULL), NULL)));
- print_tree(tree->root);
void* value = splaytree_lookup(tree, 44);
- print_tree(tree->root);
CHECK((void*)44 == value);
- print_tree(tree->root);
splaytree_destroy(tree);
}
{
splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
tree->root = node(42, node(41, node(39, NULL, node(40, NULL, NULL)), NULL), NULL);
- print_tree(tree->root);
void* value = splaytree_lookup(tree, 40);
- print_tree(tree->root);
CHECK((void*)40 == value);
- print_tree(tree->root);
splaytree_destroy(tree);
}