A binary search tree is a binary tree with the following property.
| If a given node v has item k, then all nodes in the left subtree of v have items that are less than k, and all nodes in the right subtree of v have items that are greater than k. |
For example, the following is a binary search tree.
A binary search tree can have any shape, as long as it obeys the ordering requirement. The following is a binary search tree. (The left subtree of each node is an empty tree.)
Our intent is to use a binary search tree as an implementation of a set of integers, namely, the set of integers that occur in the tree. An empty tree represents an empty set.
Functions can take advantage of the ordering requirement in a way that is similar to what binary search does. A membership testing function can exploit the following facts.
An empty tree has no members.
If the root of T contains x, then tree T clearly contains x.
If the root of T contains k and x < k then, if x occurs in T at all, it must occur in T 's left subtree, by the ordering requirement for binary search trees.
Similarly, if the root of T contains k and x > k, then x occurs in T if and only if x occurs in T 's right subtree.
//==========================================
// member
//==========================================
// member(x,T) returns true if x is in binary
// search tree T.
//==========================================
bool member(const int x, const Tree T)
{
if(T == NULL)
{
return false;
}
else if(x == T->item)
{
return true;
}
else if(x < T->item)
{
return member(x, T->left);
}
else
{
return member(x, T->right);
}
}
Notice the similarity between that and binary search.