public void deleteItem( KeyedItem target ) throws TreeException
{
if( target == null )
{
throw new TreeException( "the deference is null " );
}
TreeItem delTemp = searchItem( target );//找寻节点
if( delTemp == null )
{
throw new TreeException( "the note do not exsit!! " );
}
else
{
if( delTemp.getLeftTree() == null && delTemp.getRightTree() == null )//要删除的目标是叶子寄点
{
TreeItem delTempPar = binaryGetParent( target );//找到母节点
DelSwitch( delTempPar, null );//删除切换
}
else if( delTemp.getLeftTree() == null && delTemp.getRightTree() != null )//要删除的目标有右一个孩子
{
TreeItem delTempPar = binaryGetParent( target );//找到母节点
DelSwitch( delTempPar, delTemp.getRightTree() );//give the RightSubTree to the mother node
}
else if( delTemp.getLeftTree() != null && delTemp.getRightTree() == null )//要删除的目标有左一个孩子
{
TreeItem delTempPar = binaryGetParent( target );//找到母节点
DelSwitch( delTempPar, delTemp.getLeftTree() );//give the LeftSubTree to the mother node
}
else
{
//找到替换内容的节点 就是要被删除的节点的右子树的最深度的左节点的内容
TreeItem plmP = processLeftMost( delTemp.getRightTree() );
//plmP.getSearchKey().display();
TreeItem delTempPar = binaryGetParent( plmP.getData() );//找到拥有替换数据的母节点
delTemp.setData( plmP.getData() );//将要删除的节点的数据用有用数据替换掉
if( plmP.getRightTree() == null )//是叶子节点
{
delTempPar.setRightTree( null );//将这个最深左节点(叶子节点)删除
}
else
{
delTempPar.setRightTree( plmP.getRightTree() );
System.out.println( "********************** " );