Ejemplo n.º 1
0
static HklTreeNode*
hkl_treenode_insert(HklTree* tree, HklTreeNode* node, HklString* key, void* value)
{
  assert(key != NULL);

  // Insert in an empty node
  if (node == NULL)
  { 
    ++tree->size;
    return hkl_treenode_new(key, value);
  }

  if (hkl_treenode_isred(node->left) && hkl_treenode_isred(node->right))
    hkl_treenode_colorflip(node);

  int cmp = hkl_string_compare(node->pair->key, key);
  if (cmp == 0)     node->pair->value = value;
  else if (cmp < 0) node->left = hkl_treenode_insert(tree, node->left, key, value);
  else              node->right = hkl_treenode_insert(tree, node->right, key, value);

  if (hkl_treenode_isred(node->right) && !hkl_treenode_isred(node->left))
    node = hkl_treenode_rotleft(node);

  if (hkl_treenode_isred(node->left) && hkl_treenode_isred(node->left->left))
    node = hkl_treenode_rotright(node);

  return node;
}
Ejemplo n.º 2
0
void hkl_tree_insert(HklTree* tree, HklString* key, void* value)
{
  assert(tree != NULL);
  assert(key != NULL);

  tree->root = hkl_treenode_insert(tree->root, key, value);
  tree->root->isred = false;
}