rbtree: initial implementation

This commit is contained in:
Matheus
2025-12-25 20:16:58 -03:00
parent 3380293cf2
commit b2ccb01bd9
2 changed files with 647 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
#ifndef _RBTREE_H
#define _RBTREE_H
typedef struct rbtree_t {
struct rbtree_t *left, *right, *parent;
} rbtree_t;
// return -1 when a < b
// return 0 when a = b
// return 1 when a > b
typedef int (*rbtree_compare_fn_t)(rbtree_t *a, rbtree_t *b);
typedef int (*rbtree_value_compare_fn_t)(void *a, rbtree_t *b);
typedef void (*rbtree_print_fn_t)(rbtree_t *node);
rbtree_t *rbtree_lookup(rbtree_t *rbtree, void *key, rbtree_value_compare_fn_t compare_fn);
void rbtree_insert(rbtree_t **rbtreep, rbtree_t *node, rbtree_compare_fn_t compare_fn);
void rbtree_remove(rbtree_t **rbtreep, rbtree_t *node);
void rbtree_check(rbtree_t *rbtree);
void rbtree_print(rbtree_t *rbtree, rbtree_print_fn_t print_fn);
rbtree_t *rbtree_first(rbtree_t *rbtree);
rbtree_t *rbtree_last(rbtree_t *rbtree);
rbtree_t *rbtree_successor(rbtree_t *node);
rbtree_t *rbtree_predecessor(rbtree_t *node);
#endif