public void delete(int k) { root = delete(root, k); } public Node delete(Node t, int k) { if (t == null) { return null; // k not in the tree } // Find the node to delete: the one containing k if (k < t.key) { t.left = delete(t.left, k); } else if (k > t.key) { t.right = delete(t.right, k); } else { // we found it. Now delete t if (t.left == null) { // So we are in case 1 return t.right; } else if (t.right == null) { // Also in case 1 return t.left; } else { // THE BAD CASE 2 - t has two children Node s = min(t.right); t.key = s.key; t.right = delete(t.right, t.key); } } return t; }