Code Fragment: BST2



public:
  Position find(const Key& k) {				// find a key
    BTPosition p = finder(k, T.root());			// search for it
    if (T.isInternal(p))				// found it
      return Position(p);				// return its position
    else 						// didn't find it
      return Position(NULL);				// return null position
  }
protected:
  BTPosition finder(const Key& k, const BTPosition& p) {// find utility
    if (T.isExternal(p)) return p;			// key not found
    Key curKey = key(p);				// key of current node
    if (k < curKey)
      return finder(k, T.leftChild(p));			// search left subtree
    else if(k > curKey)
      return finder(k, T.rightChild(p));		// search right subtree
    else 						// found it
      return p;						// return this position
  }