如何删除 java 中的二叉树的根?

How to remove the root of an binary tree in java?

如何去除二叉树的根?

private static  NodeClass remove(int deleteThisItem, NodeClass item) { 
        deleted=false;
        if(item==null)                    
            return item;  

    ///////////////////////////////////////////
    if(deleteThisItem<item.value)
        item.left=remove(deleteThisItem,item.left);

    else if(deleteThisItem>item.value)
        item.right=remove(deleteThisItem,item.right);
    ///////////////////////////////////////////////
deleted=false;
    if(item==null)                  
        return item;
    ///////////////////////////////////////////
    if(deleteThisItem<item.value)
        item.left=remove(deleteThisItem,item.left);

    else if(deleteThisItem>item.value)
        item.right=remove(deleteThisItem,item.right);
    ///////////////////////////////////////////////
    else if(deleteThisItem==item.value){
            if(item.left!=null&&item.right!=null){
            item.value=findMax(item.left).value;        
            item.left=remove(item.value,item.left); 
            deleted=true;
        }
        else if(item.left!=null){
            item=item.left;
            deleted=true;
        }
        else if( item.right!=null){
            item=item.right;
            deleted=true;
        }

    }
    else {
        System.out.println("hata");
        System.exit(0);
    }
    return item;

这是我的删除方法。这种方法效果很好,但我无法删除根。 这是我的主要方法:

if(command.equals("R")){
            int value=scan.nextInt();
            remove(value) ;
            if(getDeleted())
            System.out.println(value+" removed.");
            else
                System.out.println(value+" cannot found in the tree!.");
        }

例如,如果树的根是 10,我想删除 it.When 我尝试删除它,我得到了:

10 cannot found in the tree!.

我像这样调用删除:

private static boolean deleted=false;

public static void remove(int key) { //This method called from my main
    root=remove(key,root);  
}   

public static boolean getDeleted(){
    return deleted;
}

您无法删除根节点,因为您的代码在内部 if / else if / else if 语句之后缺少 else 语句。这意味着您没有涵盖所有情况(具有单个节点的树就是这样一种情况)。

紧接着

else if(item.right != null)
{
    item = item.right;
    deleted = true;
}

添加一个else

else
{
    item = null;
    deleted = true;
}