2018-03-24 00:58:24 +00:00
|
|
|
#ifndef LIB_AVL_TREE_H
|
|
|
|
#define LIB_AVL_TREE_H
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-01-26 08:43:22 +00:00
|
|
|
#include "type.h"
|
|
|
|
#include "lib/sxtdlib.h"
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node
|
2017-02-01 03:26:08 +00:00
|
|
|
{
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *left;
|
|
|
|
struct avl_tree_node *right;
|
|
|
|
struct avl_tree_node *parent;
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
int32 height;
|
|
|
|
};
|
2017-02-01 03:26:08 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
*/
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree
|
2017-02-01 03:26:08 +00:00
|
|
|
{
|
2018-03-24 00:58:24 +00:00
|
|
|
callback_func compare;
|
|
|
|
struct avl_tree_node *root;
|
|
|
|
};
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_search(struct avl_tree *tree, struct avl_tree_node *entry);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
void SXAPI lb_avl_tree_insert(struct avl_tree *tree, struct avl_tree_node *entry);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_delete(struct avl_tree *tree, struct avl_tree_node *entry);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
void SXAPI lb_avl_tree_init(struct avl_tree *tree, callback_func compare);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_largest(struct avl_tree *tree);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_smallest(struct avl_tree *tree);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_larger(struct avl_tree_node *entry);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
struct avl_tree_node *SXAPI lb_avl_tree_smaller(struct avl_tree_node *entry);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
bool SXAPI lb_avl_tree_validate(struct avl_tree *tree);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
int32 SXAPI lb_avl_tree_size(struct avl_tree *tree);
|
2017-02-01 03:26:08 +00:00
|
|
|
|
|
|
|
#endif
|