interface BSTree { public void remove(Comparable x); public void insert(Comparable x); public boolean find(Comparable x); } class BST extends BinaryTree implements BSTree { public BNode findNode(Comparable x) { if (root() == null) return null; return findNode((BNode) root(), x); } public BNode findNode(BNode n, Comparable x) { BNode nn = null; if (((Comparable) n.getData()).compareTo(x) == 0) return n; if (((Comparable) n.getData()).compareTo(x) > 0) nn = n.getLeft(); else nn = n.getRight(); if (nn == null) return n; return findNode(nn, x); } public void remove(Comparable x) { BNode n = findNode(x); if (n == null || !n.getData().equals(x)) return; // x is not present removeNode(n); } public void insert(Comparable x) { BNode n = findNode(x); if (n == null) addRoot(x); else if (((Comparable) n.getData()).compareTo(x) > 0) addLeft(n, x); else if (((Comparable) n.getData()).compareTo(x) < 0) addRight(n, x); } public boolean find(Comparable x) { BNode n = findNode(x); if (n == null || !n.getData().equals(x)) return false; return true; } }