mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-18 03:51:35 +08:00
50 lines
1.3 KiB
C
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_
|