static final Tree removeGreaterOrEqual(FreeSlotNode a_in, TreeIntObject a_finder) { if (a_in == null) { return null; } int cmp = a_in._key - a_finder._key; if (cmp == 0) { a_finder._object = a_in; // the highest node in the hierarchy !!! return a_in.remove(); } if (cmp > 0) { a_in._preceding = removeGreaterOrEqual((FreeSlotNode) a_in._preceding, a_finder); if (a_finder._object != null) { a_in._size--; return a_in; } a_finder._object = a_in; return a_in.remove(); } a_in._subsequent = removeGreaterOrEqual((FreeSlotNode) a_in._subsequent, a_finder); if (a_finder._object != null) { a_in._size--; } return a_in; }