Our Java class definitions will now look as follows. The beginning of the abstract SearchTree class will be
public abstract class SearchTree {
public static SearchTree empty() {
return new EmptyTree();
}
public abstract boolean isEmpty();
.... more methods
}
This will have two extensions, one for EmptyTree and one for
NodeTree. The EmptyTree extension will begin
class EmptyTree extends SearchTree {
protected EmptyTree() {}
public boolean isEmpty() {
return true;
}
.... more methods
}
The NodeTree extension will begin
class NodeTree extends SearchTree {
private Comparable data;
private SearchTree left;
private SearchTree right;
protected NodeTree(Comparable item) {
data = item;
left = empty();
right = empty();
}
public boolean isEmpty() {
return false;
}
.... more methods
}