code: public static <K, V> OMVRBTreeEntry<K, V> predecessor(final OMVRBTreeEntry<K, V> t) {
      if (t == null)
        return null;
      else if (t.getLeft() != null) {
        OMVRBTreeEntry<K, V> p = t.getLeft();
        while (p.getRight() != null)
          p = p.getRight();
        return p;
      } else {
        OMVRBTreeEntry<K, V> p = t.getParent();
        Entry<K, V> ch = t;
        while (p != null && ch == p.getLeft()) {
          ch = p;
          p = p.getParent();
        }
        return p;
      }
    }
docs: Returns the predecessor of the specified Entry, or null if no such.