public void delete(Comparable target){
// post: deletes a node with data equal to target, if present,
// preserving binary search tree property
myRoot = deleteHelper(myRoot, target);
}
private TreeNode deleteHelper(TreeNode node, Comparable target) {
// pre : node points to a non-empty binary search tree
// post: deletes a node with data equal to target, if present,
// preserving binary search tree property
if (node == null)
throw new NoSuchElementException();
else if (target.compareTo(node.getValue()) == 0){
return deleteTargetNode(node);
}
else if (target.compareTo(node.getValue()) < 0) {
node.setLeft(deleteHelper(node.getLeft(), target));
return node;
}
else //target.compareTo(root.getValue()) > 0{
node.setRight(deleteHelper(node.getRight(), target));
return node;
}
}
private TreeNode deleteTargetNode(TreeNode target) {
// pre : target points to node to be deleted
// post: target node is deleted preserving binary search tree property
if (target.getRight() == null)
{
return target.getLeft();
}
else if (target.getLeft() == null)
{
return target.getRight();
}
else if (target.getLeft().getRight() == null)
{
target.setValue(target.getLeft().getValue());
target.setLeft(target.getLeft().getLeft());
return target;
}
else // left child has right child
{
TreeNode marker = target.getLeft();
while (marker.getRight().getRight() != null)
marker = marker.getRight();
target.setValue(marker.getRight().getValue());
marker.setRight(marker.getRight().getLeft());
return target;
}
}
// ------------------ testDelete method - add to BSTree.java
public void testDelete(BinarySearchTree temp){
int idToDelete;
boolean success;
System.out.println("Testing delete algorithm\n");
System.out.print("Enter Id value to delete (-1 to quit) --> ");
idToDelete = console.readInt();
while (idToDelete >= 0){
Item dNode = new Item(idToDelete, 0);
if (temp.find(dNode) == null)
System.out.println("Id# " + idToDelete + " No such part in stock");
else{
temp.delete(dNode);
System.out.println(" Id #" + idToDelete + " was deleted");
}
System.out.println();
System.out.print("Enter Id value to delete (-1 to quit) --> ");
idToDelete = console.readInt();
}
}