Markus Metz 5b2cf4fc75 rbtree: add backward traversal 12 年 前
..
Makefile 62a5737c3b add balanced search tree to lib, update Vlib and segment 15 年 前
README 62a5737c3b add balanced search tree to lib, update Vlib and segment 15 年 前
rbtree.c 5b2cf4fc75 rbtree: add backward traversal 12 年 前

README


#include

and link to BTREE2LIB

to make use of this binary balanced (Red-Black) search tree

NOTE: duplicates are not supported


USAGE
=====

see also grass/rbtree.h for instructions on how to use it

/* custom compare function */
extern int my_compare_fn(const void *, const void *);
int my_compare_fn(const void *a, const void *b)
{
if ((mydatastruct *) a < (mydatastruct *) b)
return -1;
else if ((mydatastruct *) a > (mydatastruct *) b)
return 1;
else if ((mydatastruct *) a == (mydatastruct *) b)
return 0;
}

/* create and initialize tree: */
struct RB_TREE *mytree = rbtree_create(my_compare_fn, item_size);

/* insert items to tree: */
struct mydatastruct data = ;

if (rbtree_insert(mytree, &data) == 0)
G_warning("could not insert data");

/* find item in tree: */
struct mydatastruct data = ;

if (rbtree_find(mytree, &data) == 0)
G_message("data not found");

/* delete item from tree: */
struct mydatastruct data = ;

if (rbtree_remove(mytree, &data) == 0)
G_warning("could not find data in tree");

/* traverse tree (get all items in tree in ascending order): */
struct RB_TRAV trav;

rbtree_init_trav(&trav, tree);
while ((data = rbtree_traverse(&trav)) != NULL) {
if (my_compare_fn(data, threshold_data) == 0) break;
/* do something with data */
}

/* get a selection of items: all data > data1 and < data2
* start in tree where data is last smaller or first larger compared to data1 */
struct RB_TRAV trav;

rbtree_init_trav(&trav, tree);
data = rbtree_traverse_start(&trav, &data1);
/* do something with data */
while ((data = rbtree_traverse(&trav)) != NULL) {
if (data > data2) break;
/* do something with data */
}

/* destroy tree: */
rbtree_destroy(mytree);

/* debug the whole tree with */
rbtree_debug(mytree, mytree->root);