//trees.h #define ALREADY_IN_TREE 1 #define OUT_OF_MEMORY 2 struct Tree { int elem; struct Tree *left; struct Tree *right; }; extern struct Tree *insertElem (int, struct Tree *, int *); // trees.c #include #include /* insert element into tree; return error if already present */ struct Tree *insertElem (int elem, struct Tree *tree, int *errno) { if (tree != NULL) { if (elem == tree->elem) { *errno = ALREADY_IN_TREE; return (NULL); } if (elem < tree->elem) tree->left = insertElem (elem, tree->left, errno); else tree->right = insertElem (elem, tree->right, errno); } else { /* create a new leaf */ tree = malloc (sizeof (struct Tree)); if (!tree) { *errno = OUT_OF_MEMORY; return (NULL); } tree->elem = elem; tree->left = NULL; tree->right = NULL; } return tree; }