template <typename Key, typename Element,
typename BSTItem = Item<Key, Element> >
class BinarySearchTree {
protected: // local types
typedef BinaryTree<BSTItem>::Position BTPosition; // a tree position
public: // public types
// ... (insert Position here)
protected: // member data
BinaryTree<BSTItem> T; // the binary tree
protected: // local utilities
Key key(const BTPosition& p) const // get position's key
{ return p.element().key(); }
// set a node's item
void setItem(const BTPosition& p, const BSTItem& i) const {
p.element().setKey(i.key());
p.element().setElement(i.element());
}
public:
BinarySearchTree() : T() { } // constructor
int size() const // size
{ return (T.size() - 1) / 2; } // number of internals
bool isEmpty() const
{ return size() == 0; }
// ... (insert find, insert, and remove functions here)
};