class BinTree
{ private Node root;
public void delete(int v)
{ root=Node.delete(v,root);
}
private class Node
{ private int value;
private Node left;
private Node right;
static Node delete(int v,Node n)
{ if(n!=null)
{ if(n.value==v)
{ if(n.left==null) return n.right;
else if(n.right==null)
return n.left;
else
{ n.value=fetch_left(n.right);
n.right=del_left(n.right);
}
}
else if(v<n.value)
n.left=delete(v,n.left);
else n.right=delete(v,n.right);
}
return n;
}
static int fetch_left(Node n)
{ while(n.left!=null) n=n.left;
return n.value;
}
static Node del_left(Node n)
{ if(n.left!=null)
{ n.left=del_left(n.left);
return n;
}
else return n.right;
}
}
}
Deletion of a node requires the same number of steps as searching or inserting a new node.