| RBTREE(3) | Library Functions Manual | RBTREE(3) | 
rbtree —
#include <sys/rbtree.h>
void
  
  rb_tree_init(rb_tree_t
    *rbt, const rb_tree_ops_t
    *ops);
void *
  
  rb_tree_insert_node(rb_tree_t
    *rbt, void
  *rb);
void
  
  rb_tree_remove_node(rb_tree_t
    *rbt, void
  *rb);
void *
  
  rb_tree_find_node(rb_tree_t
    *rbt, const void
    *key);
void *
  
  rb_tree_find_node_geq(rb_tree_t
    *rbt, const void
    *key);
void *
  
  rb_tree_find_node_leq(rb_tree_t
    *rbt, const void
    *key);
void *
  
  rb_tree_iterate(rb_tree_t
    *rbt, void *rb,
    unsigned int
  direction);
void *
  
  RB_TREE_MIN(rb_tree_t
    *rbt);
void *
  
  RB_TREE_MAX(rb_tree_t
    *rbt);
RB_TREE_NEXT(rb_tree_t
    *rbt, void
  *rb);
RB_TREE_PREV(rb_tree_t
    *rbt, void
  *rb);
RB_TREE_FOREACH(void
    *rb, rb_tree_t
    *rbt);
RB_TREE_FOREACH_SAFE(void
    *rb, rb_tree_t
    *rbt, void
  *tmp);
RB_TREE_FOREACH_REVERSE(void
    *rb, rb_tree_t
    *rbt);
RB_TREE_FOREACH_REVERSE_SAFE(void
    *rb, rb_tree_t
    *rbt, void
  *tmp);
rbtree provides red-black trees. A red-black tree is a
  binary search tree with the node color as an extra attribute. It fulfills a
  set of conditions:
Every operation on a red-black tree is bounded as O(lg n). The maximum height of a red-black tree is 2lg (n+1).
        rbto_compare_nodes_fn rbto_compare_nodes;
        rbto_compare_key_fn rbto_compare_key;
        size_t rbto_node_offset;
        void *rbto_context;
    
    rbtree interface are meant to
      take pointers directly to the rb_node_t
    member.)rb_tree_init(rbt,
    ops)rb_tree_init() always succeeds.rb_tree_insert_node(rbt,
    rb)rb_tree_remove_node(rbt,
    rb)rb_tree_find_node(rbt,
    key)NULL. Otherwise, return the matching node.rb_tree_find_node_geq(rbt,
    key)NULL.rb_tree_find_node_leq(rbt,
    key)NULL.rb_tree_iterate(rbt,
    rb, direction)RB_DIR_LEFT,
      return the node in the tree rbt immediately
      preceding the node rb or, if
      rb is NULL, return the first
      node in rbt or, if the tree is empty, return
      NULL.
    If direction is
        RB_DIR_RIGHT, return the node in the tree
        rbt immediately following the node
        rb or, if rb is
        NULL, return the last node in
        rbt or, if the tree is empty, return
        NULL.
RB_TREE_MIN(rbt)NULL if rbt is
      empty.RB_TREE_MAX(rbt)NULL if rbt
      is empty.RB_TREE_NEXT(rbt,
    rb)NULL if there is none.RB_TREE_PREV(rbt,
    rb)NULL if there is none.RB_TREE_FOREACH(rb,
    rbt)RB_TREE_FOREACH is a macro to be used in the place
      of a for header preceding a statement to traverse
      the nodes in rbt from least to greatest, assigning
      rb to each node in turn and executing the
    statement.RB_TREE_FOREACH_SAFE(rb,
    rbt, tmp)RB_TREE_FOREACH_REVERSE(rb,
    rbt)RB_TREE_FOREACH_REVERSE is a macro to be used in
      the place of a for header preceding a statement to
      traverse the nodes in rbt from greatest to least,
      assigning rb to each node in turn and executing the
      statement.RB_TREE_FOREACH_REVERSE_SAFE(rb,
    rbt, tmp)rbtree interface is implemented in
  common/lib/libc/gen/rb.c.
rbtree interface first appeared in
  NetBSD 6.0.
rbtree.
  
  Niels Provos
    <provos@citi.umich.edu>
    wrote the tree(3) manual page.
    Portions of this page derive from that page.
| March 4, 2019 | NetBSD 9.3 |