#include "tree.h" TREE *FindInTree (tree, key, compare) register TREE *tree; char *key; int (*compare) (); { register int c; while (tree != NULL) { c = (*compare) (key, KeyOfEntry (tree->entree)); if (c == 0) break; else if (c < 0) tree = tree->left; else tree = tree->right; } return (tree); } TREE *InsertInTree (tree, entree, compare) register TREE **tree; ENTRY *entree; int (*compare) (); { register int c; while (*tree != NULL) { c = (*compare) (KeyOfEntry (entree), KeyOfEntry ((*tree)->entree)); if (c < 0) /* ignore case of repeated keys */ { (*tree)->weight++; tree = &((*tree)->left); } else tree = &((*tree)->right); } if ((*tree = (TREE *) malloc (sizeof (TREE))) == NULL) AllocError ("InsertInTree"); (*tree)->entree = entree; (*tree)->left = (*tree)->right = NULL; (*tree)->weight = 1; return (*tree); } TREE *NthInTree (tree, n) register TREE *tree; register long n; { while (tree != NULL) { n -= tree->weight; if (n == 0) break; else if (n < 0) { n += tree->weight; tree = tree->left; } else tree = tree->right; } return (tree); }