private Match findMatch(A a) {
    assert a != null;

    Node n = sentinel.left();

    if (n == null) {
      return new Match(false, sentinel, true);
    }

    while (true) {
      int c = a.compareTo(n.contents);
      if (c == 0) {
        return new Match(true, n, false);
      } else if (c < 0) {
        if (n.left()  == null) return new Match(false, n, true);
        else                   n = n.left();
      } else {
        if (n.right() == null) return new Match(false, n, false);
        else                   n = n.right();
      }
    }
  }