The code is written by Scott Lembcke.
// author: Scott Lembcke
// Oct. 29th 2004
public void delete(int data) {
IntNode nodeParent = null;
IntNode node = root;
if (root == null) {
System.out.println("can't delete " + data + ": no such node");
return;
}
while(node.getData()!=data){
nodeParent = node;
if(data < node.getData()){
node = node.getLeft();
} else {
node = node.getRight();
}
if (node == null) {
System.out.println("can't delete " + data + ": no such node");
return;
}
}
if(node.getRight()!=null){
IntNode next = node.getRight();
IntNode nextParent = node;
boolean isLeft = false;
while(next.getLeft()!=null){
nextParent = next;
next = next.getLeft();
isLeft = true;
}
node.setData(next.getData());
if(isLeft) nextParent.setLeft(next.getRight());
else nextParent.setRight(next.getRight());
} else {
if(node!=root){
if(node == nodeParent.getLeft()){
nodeParent.setLeft(node.getLeft());
} else {
nodeParent.setRight(node.getLeft());
}
}
else root = root.getLeft();
}
}