unicstl/include/rbtree.h

50 lines
1.3 KiB
C

#ifndef _RBTREE_H_
#define _RBTREE_H_
#include "config.h"
#if RBTREE == 1
typedef int rbtree_data_t;
typedef struct _rbtree_node_t
{
rbtree_data_t data;
struct _rbtree_node_t * left;
struct _rbtree_node_t * right;
struct _rbtree_node_t * parent;
uint32_t color;
}rbtree_node_t, *prbtree_node_t;
typedef struct _rbtree_t
{
struct _rbtree_node_t * tree;
uint32_t size;
}rbtree_t, *prbtree_t;
typedef void (*tree_data_disp_t)(rbtree_data_t data);
bool rbtree_init(prbtree_t *head);
void rbtree_destroy(prbtree_t * head);
bool rbtree_empty(prbtree_t head);
void rbtree_clear(prbtree_t head);
uint32_t rbtree_get_size(prbtree_t head);
bool rbtree_insert(prbtree_t head, rbtree_data_t data);
bool rbtree_delete(prbtree_t head, rbtree_data_t data);
bool rbtree_get_min(prbtree_t head, rbtree_data_t *data);
bool rbtree_get_max(prbtree_t head, rbtree_data_t *data);
void rbtree_traversal_depth_preorder(prbtree_t head, tree_data_disp_t tree_data_disp);
void rbtree_traversal_depth_inorder(prbtree_t head, tree_data_disp_t tree_data_disp);
void rbtree_traversal_depth_postorder(prbtree_t head, tree_data_disp_t tree_data_disp);
void rbtree_traversal_breadth(prbtree_t head, tree_data_disp_t tree_data_disp);
// check
bool rbtree_check(prbtree_t head);
#endif
#endif // _RBTREE_H_