日期:2014-05-20  浏览次数:20750 次

我的搜索二叉树 出了一些大问题(删除的时候会丢掉子树)
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(   "********************** "   );