@@ -313,75 +313,25 @@ protected Node<T> removeValue(T value) {
313313 */
314314 protected Node <T > getReplacementNode (Node <T > nodeToRemoved ) {
315315 Node <T > replacement = null ;
316- Node <T > parent = nodeToRemoved .parent ;
317- if (parent == null ) {
318- // Replacing the root node
319- if (nodeToRemoved .lesser != null && nodeToRemoved .greater == null ) {
320- // Replace with lesser subtree
321- replacement = nodeToRemoved .lesser ;
322- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser == null ) {
323- // Replace with greater subtree
324- replacement = nodeToRemoved .greater ;
325- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser != null ) {
326- // Two children
327- // Add some randomness to deletions, so we don't always use the
328- // greatest/least on deletion
329- if (modifications % 2 != 0 ) {
330- replacement = this .getGreatest (nodeToRemoved .lesser );
331- if (replacement == null ) replacement = nodeToRemoved .lesser ;
332- } else {
333- replacement = this .getLeast (nodeToRemoved .greater );
334- if (replacement == null ) replacement = nodeToRemoved .greater ;
335- }
336- modifications ++;
337- }
338- } else if (parent .lesser != null && (parent .lesser .id .compareTo (nodeToRemoved .id ) == 0 )) {
339- // If the node to remove is the parent's lesser node, replace
340- // the parent's lesser node with one of the node to remove's
341- // lesser/greater subtrees
342- if (nodeToRemoved .lesser != null && nodeToRemoved .greater == null ) {
343- // Using the less subtree
344- replacement = nodeToRemoved .lesser ;
345- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser == null ) {
346- // Using the greater subtree (there is no lesser subtree, no
347- // refactoring)
348- replacement = nodeToRemoved .greater ;
349- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser != null ) {
350- // Two children
351- // Add some randomness to deletions, so we don't always use the
352- // greatest/least on deletion
353- if (modifications % 2 != 0 ) {
354- replacement = this .getGreatest (nodeToRemoved .lesser );
355- if (replacement == null ) replacement = nodeToRemoved .lesser ;
356- } else {
357- replacement = this .getLeast (nodeToRemoved .greater );
358- if (replacement == null ) replacement = nodeToRemoved .greater ;
359- }
360- modifications ++;
361- }
362- } else if (parent .greater != null && (parent .greater .id .compareTo (nodeToRemoved .id ) == 0 )) {
363- // If the node to remove is the parent's greater node, replace
364- // the parent's greater node with the node's greater node
365- if (nodeToRemoved .lesser != null && nodeToRemoved .greater == null ) {
366- // Using the less subtree
367- replacement = nodeToRemoved .lesser ;
368- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser == null ) {
369- // Using the greater subtree (there is no lesser subtree, no
370- // refactoring)
371- replacement = nodeToRemoved .greater ;
372- } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser != null ) {
373- // Two children
374- // Add some randomness to deletions, so we don't always use the
375- // greatest/least on deletion
376- if (modifications % 2 != 0 ) {
377- replacement = this .getGreatest (nodeToRemoved .lesser );
378- if (replacement == null ) replacement = nodeToRemoved .lesser ;
379- } else {
380- replacement = this .getLeast (nodeToRemoved .greater );
381- if (replacement == null ) replacement = nodeToRemoved .greater ;
382- }
383- modifications ++;
316+ if (nodeToRemoved .lesser != null && nodeToRemoved .greater == null ) {
317+ // Using the less subtree
318+ replacement = nodeToRemoved .lesser ;
319+ } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser == null ) {
320+ // Using the greater subtree (there is no lesser subtree, no
321+ // refactoring)
322+ replacement = nodeToRemoved .greater ;
323+ } else if (nodeToRemoved .greater != null && nodeToRemoved .lesser != null ) {
324+ // Two children
325+ // Add some randomness to deletions, so we don't always use the
326+ // greatest/least on deletion
327+ if (modifications % 2 != 0 ) {
328+ replacement = this .getGreatest (nodeToRemoved .lesser );
329+ if (replacement == null ) replacement = nodeToRemoved .lesser ;
330+ } else {
331+ replacement = this .getLeast (nodeToRemoved .greater );
332+ if (replacement == null ) replacement = nodeToRemoved .greater ;
384333 }
334+ modifications ++;
385335 }
386336 return replacement ;
387337 }
0 commit comments