You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.3 KiB
66 lines
1.3 KiB
#ifndef _BBTREE_H_
|
|
#define _BBTREE_H_
|
|
|
|
/* this is only here for testing. In final version
|
|
* it should be in bbtree.c */
|
|
typedef
|
|
struct bbTreeNode
|
|
{
|
|
void * value;
|
|
|
|
long height;
|
|
|
|
struct bbTreeNode * left;
|
|
struct bbTreeNode * right;
|
|
|
|
} s_bbTreeNode;
|
|
|
|
#define BBTREE_LEFT_HEIGHT(t) ((t)->left ? (t)->left->height : -1)
|
|
#define BBTREE_RIGHT_HEIGHT(t) ((t)->right ? (t)->right->height : -1)
|
|
#define BBTREE_AVL(t) (BBTREE_RIGHT_HEIGHT ((t)) - \
|
|
BBTREE_LEFT_HEIGHT ((t)))
|
|
|
|
|
|
/*
|
|
* comparison for tree-node values.
|
|
* Has to be defined by user and set
|
|
* with bbTreeNew.
|
|
*
|
|
* params:
|
|
* left: pointer to left value
|
|
* right: pointer to right value
|
|
*
|
|
* returns:
|
|
* 0: if values equal
|
|
* 1: if right greater left
|
|
* -1: if left greater right
|
|
*/
|
|
typedef int (* t_bbTreeCmp) (void *, void *);
|
|
|
|
typedef
|
|
struct bbTree
|
|
{
|
|
struct bbTreeNode * root;
|
|
|
|
t_bbTreeCmp cmp;
|
|
} s_bbTree;
|
|
|
|
|
|
/* constructor, destructor */
|
|
s_bbTree * bbTreeNew (t_bbTreeCmp);
|
|
void bbTreeFree (s_bbTree *);
|
|
|
|
/* data manipulation */
|
|
void * bbTreeInsert (s_bbTree *, void *);
|
|
void * bbTreeSeek (s_bbTree *, void *);
|
|
void * bbTreeRemove (s_bbTree *, void *);
|
|
|
|
/* analysation */
|
|
void * bbTreeMin (s_bbTree *);
|
|
void * bbTreeMax (s_bbTree *);
|
|
int bbTreeSize (s_bbTree *);
|
|
|
|
/* bbTree to other Datastructure */
|
|
void ** bbTreeInOrder (s_bbTree *, void **);
|
|
|
|
#endif /* _BBTREE_H_ */
|