Функции split и skew в AA tree
Вот функции split и skew, но работают не правильно, почему?
#include "aatree.h"
#include <stdlib.h>
aatree* skew(aatree* node) {
if(node == NULL)
return NULL;
else if(node->left == NULL)
return node;
else if(node->level != node->left->level)
return node;
aatree *left = node->left;
node->left = left->right;
left->right = node;
node = left;
return node;
}
aatree* split(aatree *node) {
if (node == NULL)
return NULL;
else if(node->right == NULL || node->right->right == NULL)
return node;
else if(node->right->right->level != node->level)
return node;
aatree* right = node->right;
node->right = right->left;
node = right;
node->level++;
return node;
}
aatree* insert(aatree* root, int key) {
if (root == NULL)
return root;
else if (key < root->key)
root->left = insert(root->left, key);
else if(key > root->key)
root->right = insert(root->right, key);
root = skew(root);
root = split(root);
return root;
}