BST Operation: Find
- Implement the core operations of an OrderedSet efficiently with a Binary Search Tree.
The has
operation in a BST implementation of OrderedSet ADT can perform a binary search.
Exercise Complete the implementation of has
.
@Override
public boolean has(T t) {
// TODO Implement me!
return false;
}
Suggestion: Make use of a private helper find
method.
Solution
Here is the implementation of has
:
@Override
public boolean has(T t) {
Node<T> target = find(t);
return target != null;
}
And this is the implementation of the find
helper method:
private Node<T> find(T data) {
Node<T> curr = root;
while (curr != null) {
if (curr.data.compareTo(data) > 0) {
curr = curr.left;
} else if (curr.data.compareTo(data) < 0) {
curr = curr.right;
} else {
return curr;
}
}
return curr;
}
We could also implement find
recursively:
private Node<T> find(Node<T> root, T data) {
if (root == null) {
return null;
}
if (root.data.compareTo(data) > 0) {
return find(root.left, data);
} else if (root.data.compareTo(data) < 0) {
return find(root.right, data);
} else {
return root;
}
}
Here is the same but more polished recursive implementation!
private Node<T> find(Node<T> root, T data) {
if (root == null || root.data.equals(data)) {
return root;
}
if (root.data.compareTo(data) > 0) {
return find(root.left, data);
}
return find(root.right, data);
}