Функции 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;
}

Ответы (0 шт):