Avltree *avlcreate(int(*cmp)(Avl*, Avl*));
Avl *avlinsert(Avltree *tree, Avl *new);
Avl *avldelete(Avltree *tree, Avl *key);
-Avl *avllookup(Avltree *tree, Avl *key);
+Avl *avllookup(Avltree *tree, Avl *key, int dir);
+Avl *avlmin(Avltree *tree);
+Avl *avlmax(Avltree *tree);
Avl *avlnext(Avl *n);
Avl *avlprev(Avl *n);
node with the same key that has been removed
from the tree and may be freed.
.I Avllookup
-returns the
-node that matches the key or
-.B nil
-if no node matches.
+searches for a given key and returns
+the closest node less than the given key,
+equal to,
+or the closest node greater than the key depending on whether
+.I dir
+is less than, equal to, or greater than zero, respectively. If
+.I dir
+is zero and there is no matching key, it returns
+.BR nil .
.I Avldelete
removes the node matching the key from the tree and returns
-it. It returns nil of no matching key is found.
+it. It returns nil if no matching key is found.
.PP
+.I Avlmin
+returns the minimum
+.B Avl
+node in the tree and
+.I avlmax
+returns the maximum node.
.I Avlnext
returns the next
.B Avl
return h ? h->val : -1;
}
\fI\&...\fP
- Avltree *t = avlcreate(AVL, nodecmp);
+ Avltree *t = avlcreate(nodecmp);
.EE
.SH SOURCE