The LevAWC Project
 All Data Structures Files Functions Variables Typedefs Enumerations Macros Pages
avltree.h
Go to the documentation of this file.
1 /*
2  * _____
3  * ANSI / ___/
4  * / /__
5  * \___/
6  *
7  * Filename: avltree.h
8  * Author : Kyle Loudon/Dan Levin
9  * Date : Fri Mar 22 12:40:45 GMT 2013
10  * Version : 0.51
11  * ---
12  * Description: An AVLtree - with some extensions.
13  *
14  * Date Revision message
15  * 150331 This code ready for version 0.51
16  */
21 #ifndef _AVLTREE_H_
22 #define _AVLTREE_H_
23 
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <string.h>
27 #include <malloc.h>
28 #include <assert.h>
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
38 #define AVL_LFT_HEAVY 1
39 
43 #define AVL_BALANCED 0
44 
48 #define AVL_RGT_HEAVY -1
49 
55  typedef struct AvlTreeNode_ *AvlTreeNode;
56 
62  typedef struct AvlTree_ *AvlTree;
63 
64  /* FUNCTION DECLARATIONS */
65 
89  AvlTree AVLTREEinit(int (*compare)(const void *key1, const void *key2),
90  void (*destroy)(void *data));
91 
110  void AVLTREEdestroy(AvlTree tree);
111 
149  int AVLTREEinsert(AvlTree tree, const void *data);
150 
172  int AVLTREEremove(AvlTree tree, const void *data);
173 
195  int AVLTREElookup(AvlTree tree, void **data);
196 
205  int AVLTREEsize(AvlTree tree);
206 
214  AvlTreeNode AVLTREEroot(AvlTree tree);
215 
225  int AVLTREEis_eob(AvlTreeNode node);
226 
236  int AVLTREEis_leaf(AvlTreeNode node);
237 
245  void *AVLTREEdata(AvlTreeNode node);
246 
255  AvlTreeNode AVLTREEleft(AvlTreeNode node);
256 
265  AvlTreeNode AVLTREEright(AvlTreeNode node);
266 
275  int AVLTREEheight(AvlTree tree);
276 
292  void AVLTREEprint(AvlTree tree, void (*callback)(const void *data));
293 
316  void AVLTREEpreorder(AvlTree tree, void (*callback)(const void *data));
317 
341  void AVLTREEinorder(AvlTree tree, void (*callback)(const void *data));
342 
364  void AVLTREEpostorder(AvlTree tree, void (*callback)(const void *data));
365 
366 #ifdef __cplusplus
367 }
368 #endif
369 
370 #endif /* _AVLTREE_H_ */