unicstl/include/tree.h

70 lines
2.0 KiB
C

#ifndef _TREE_H_
#define _TREE_H_
#include "common.h"
#if AVLTREE == 1 || RAVLTREE == 1
// typedef int tree_data_t;
typedef struct _tree_node_t
{
tree_data_t data;
struct _tree_node_t * left;
struct _tree_node_t * right;
struct _tree_node_t * parent;
int32_t balance; // balance of avl tree
}tree_node_t, *ptree_node_t;
typedef struct _tree_t
{
struct _tree_node_t * tree;
uint32_t size;
}tree_t, *ptree_t;
typedef void (*tree_data_disp_t)(tree_data_t data);
#endif
#if RAVLTREE == 1
bool tree_init(ptree_node_t *head);
void tree_destroy(ptree_node_t *head);
bool tree_empty(ptree_node_t head);
void tree_clear(ptree_node_t head);
uint32_t tree_get_size(ptree_node_t head);
bool tree_insert(ptree_node_t head, tree_data_t data);
bool tree_delete(ptree_node_t head, tree_data_t data);
bool tree_get_min(ptree_node_t head, tree_data_t *data);
bool tree_get_max(ptree_node_t head, tree_data_t *data);
void tree_traversal_depth_preorder(ptree_node_t head, tree_data_disp_t tree_data_disp);
void tree_traversal_depth_inorder(ptree_node_t head, tree_data_disp_t tree_data_disp);
//void tree_traversal_depth_postorder(ptree_node_t head, tree_data_disp_t tree_data_disp);
//void tree_traversal_breadth(ptree_node_t head, tree_data_disp_t tree_data_disp);
#endif
#if AVLTREE == 1
bool tree_init(ptree_t *head);
void tree_destroy(ptree_t *head);
bool tree_empty(ptree_t head);
void tree_clear(ptree_t head);
uint32_t tree_get_size(ptree_t head);
bool tree_insert(ptree_t head, tree_data_t data);
bool tree_delete(ptree_t head, tree_data_t data);
bool tree_get_min(ptree_t head, tree_data_t *data);
bool tree_get_max(ptree_t head, tree_data_t *data);
void tree_traversal_depth_preorder(ptree_t head, tree_data_disp_t tree_data_disp);
void tree_traversal_depth_inorder(ptree_t head, tree_data_disp_t tree_data_disp);
void tree_traversal_depth_postorder(ptree_t head, tree_data_disp_t tree_data_disp);
void tree_traversal_breadth(ptree_t head, tree_data_disp_t tree_data_disp);
#endif
#endif // _TREE_H_