Ejemplo n.º 1
0
static void avltree_node_delete(AVLNode *node)
  {
	  
  if (node!=NULL)
    {
    avltree_node_delete(node->right);
    avltree_node_delete(node->left);
    avltree_node_free(node);
    }

  return;
  }
Ejemplo n.º 2
0
static avltree_node_t *
_avltree_remove(avltree_node_t *root, avltree_key_t key)
{
  if (root == NULL)
    return NULL;
  if (key == root->key) {
    if (root->left && root->right) {
      root->right = _avltree_remove_min(root->right, root);
    } else {
      avltree_node_t *child;
      if (root->left)
	child = root->left;
      else
	child = root->right;
      avltree_node_delete(root);
      return child;
    }
  } else if (key < root->key) {
    root->left = _avltree_remove(root->left, key);
  } else {
    root->right = _avltree_remove(root->right, key);
  }

  return _avltree_fixup(root);
}
Ejemplo n.º 3
0
static void _avltree_delete(avltree_node_t *node)
{
  if (node) {
    _avltree_delete(node->left);
    _avltree_delete(node->right);
    avltree_node_delete(node);
  }
}
Ejemplo n.º 4
0
static avltree_node_t *
_avltree_remove_min(avltree_node_t *root, avltree_node_t *node)
{
  if (root->left) {
    root->left = _avltree_remove_min(root->left, node);
    return _avltree_fixup(root);
  } else {
    node->key = root->key;
    node = root->right;
    avltree_node_delete(root);
    return node;
  }
}
Ejemplo n.º 5
0
GAULFUNC void avltree_delete(AVLTree *tree)
  {
  if (!tree) return;

  avltree_node_delete(tree->root);

  s_free(tree);

  AVLnum_trees--;

  THREAD_LOCK(avltree_node_buffer_lock);
  if (AVLnum_trees == 0)
    _destroy_buffers();
  THREAD_UNLOCK(avltree_node_buffer_lock);

  return;
  }
Ejemplo n.º 6
0
GAULFUNC void avltree_destroy(AVLTree *tree, AVLDestructorFunc free_func)
  {
  if (!tree) return;

  if (free_func!=NULL)
    avltree_node_destroy(tree->root, free_func);
  else
    avltree_node_delete(tree->root);

  s_free(tree);

  AVLnum_trees--;

  THREAD_LOCK(avltree_node_buffer_lock);
  if (AVLnum_trees == 0)
    _destroy_buffers();
  THREAD_UNLOCK(avltree_node_buffer_lock);

  return;
  }