bond/include/lib/avl_tree.h
2018-02-18 02:48:59 -05:00

50 lines
1.2 KiB
C

#ifndef _LIB_AVL_TREE_H_
#define _LIB_AVL_TREE_H_
#include "type.h"
#include "lib/sxtdlib.h"
typedef struct _k_avl_tree_node_t
{
struct _k_avl_tree_node_t *left;
struct _k_avl_tree_node_t *right;
struct _k_avl_tree_node_t *parent;
int32_t height;
} avl_tree_node_t;
/*
* A comparison function between tree_node and your_node
* Returns:
* < 0 if tree_node < your_node
* = 0 if tree_node == your_node
* > 0 if tree_node > your_node
*/
typedef struct _k_avl_tree_t
{
callback_func_t compare;
avl_tree_node_t *root;
} avl_tree_t;
avl_tree_node_t *SXAPI lb_avl_tree_search(avl_tree_t *tree, avl_tree_node_t *entry);
void SXAPI lb_avl_tree_insert(avl_tree_t *tree, avl_tree_node_t *entry);
avl_tree_node_t *SXAPI lb_avl_tree_delete(avl_tree_t *tree, avl_tree_node_t *entry);
void SXAPI lb_avl_tree_init(avl_tree_t *tree, callback_func_t compare);
avl_tree_node_t *SXAPI lb_avl_tree_largest(avl_tree_t *tree);
avl_tree_node_t *SXAPI lb_avl_tree_smallest(avl_tree_t *tree);
avl_tree_node_t *SXAPI lb_avl_tree_larger(avl_tree_node_t *entry);
avl_tree_node_t *SXAPI lb_avl_tree_smaller(avl_tree_node_t *entry);
bool SXAPI lb_avl_tree_validate(avl_tree_t *tree);
int32_t SXAPI lb_avl_tree_size(avl_tree_t *tree);
#endif