2 * ANSI C Library for maintainance of AVL Balanced Trees
5 * G. M. Adelson-Velskij & E. M. Landis
6 * Doklady Akad. Nauk SSSR 146 (1962), 263-266
9 * D. E. Knuth: The Art of Computer Programming Vol.3 (Sorting and Searching)
11 * (C) 2000 Daniel Nagy, Budapest University of Technology and Economics
12 * Released under GNU General Public License (GPL) version 2
21 /* One element of the AVL tree */
29 typedef struct avl_tree {
31 int (*compar)(void* a, void* b);
36 /* Insert element a into the AVL tree t
37 * returns 1 if the depth of the tree has grown
38 * Warning: do not insert elements already present
40 int avl_insert(avl_tree* t, avl* a);
42 /* Remove an element a from the AVL tree t
43 * returns -1 if the depth of the tree has shrunk
44 * Warning: if the element is not present in the tree,
45 * returns 0 as if it had been removed succesfully.
47 int avl_remove(avl_tree* t, avl* a);
49 /* Remove the root of the AVL tree t
50 * Warning: dumps core if t is empty
52 int avl_removeroot(avl_tree* t);
54 /* Iterate through elements in t from a range between a and b (inclusive)
55 * for each element calls iter(a) until it returns 0
56 * returns the last value returned by iterator or 0 if there were no calls
57 * Warning: a<=b must hold
59 int avl_range(avl_tree* t, avl* a, avl* b, int (*iter)(avl* a), avl** ret);
61 /* Iterate through elements in t equal to a
62 * for each element calls iter(a) until it returns 0
63 * returns the last value returned by iterator or 0 if there were no calls
65 int avl_search(avl_tree* t, avl* a, int (*iter)(avl* a), avl** ret);