Source of 26.30.java


  1: // Removes an entry from the tree rooted at a given node.
  2: // Parameters:
  3: //    rootNode A reference to the root of a tree.
  4: //    anEntry  The object to be removed.
  5: //    oldEntry An object whose data field is null.
  6: //    Returns: The root node of the resulting tree; if anEntry matches
  7: //             an entry in the tree, oldEntry's data field is the entry
  8: //             that was removed from the tree; otherwise it is null.
  9: // @author Frank M. Carrano, Timothy M. Henry
 10: // @version 5.0
 11: private BinaryNode<T> removeEntry(BinaryNode<T> rootNode, T anEntry,
 12:                                   ReturnObject oldEntry)
 13: {
 14:    if (rootNode != null)
 15:    {
 16:       T rootData = rootNode.getData();
 17:       int comparison = anEntry.compareTo(rootData);

 19:       if (comparison == 0)       // anEntry == root entry
 20:       {
 21:          oldEntry.set(rootData);
 22:          rootNode = removeFromRoot(rootNode);
 23:       }
 24:       else if (comparison < 0)   // anEntry < root entry
 25:       {
 26:          BinaryNode<T> leftChild = rootNode.getLeftChild();
 27:          BinaryNode<T> subtreeRoot = removeEntry(leftChild, anEntry, oldEntry);
 28:          rootNode.setLeftChild(subtreeRoot);
 29:       }
 30:       else                       // anEntry > root entry
 31:       {
 32:          BinaryNode<T> rightChild = rootNode.getRightChild();
 33:          // A different way of coding than for left child:
 34:          rootNode.setRightChild(removeEntry(rightChild, anEntry, oldEntry));
 35:       } // end if
 36:    } // end if

 38:    return rootNode;
 39: } // end removeEntry