18 const void *key,
const void *val)
23 return (rbt_make_node(rbt, key, val, RBT_RED));
26 node->
left = rbt_put_recur(rbt, node->
left, key, val);
28 node->
right = rbt_put_recur(rbt, node->
right, key, val);
34 if (rbt_is_red_node(node->
right) && !rbt_is_red_node(node->
left))
35 node = rbt_rotate_left(rbt, node);
36 if (rbt_is_red_node(node->
left) && rbt_is_red_node(node->
left->
left))
37 node = rbt_rotate_right(rbt, node);
38 if (rbt_is_red_node(node->
left) && rbt_is_red_node(node->
right))
39 rbt_flip_color(rbt, node);
41 rbt_size_subtree(node->
left) + rbt_size_subtree(node->
right);
47 rbt->
root = rbt_put_recur(rbt, rbt->
root, key, val);