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

标签 java algorithm binary-tree

如何去除二叉树的根?

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,我想删除它。当我尝试删除它时,我得到:

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 block

else
{
    item = null;
    deleted = true;
}

关于java - 如何在java中删除二叉树的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059863/

相关文章:

java - 如何使用 setVisible(false) 从 JFrame 创建图像?

algorithm - 如何最小化固定分配方案所需的内存量?

java - Java 中基于图 block 的 RPG 的最佳数据结构

php - 我们如何在 php 中突出显示完整单词和部分单词?

algorithm - 如何确保命名参数列表的评估顺序和形式参数顺序?

algorithm - 构造二叉树给定其中序和前序遍历而不递归

algorithm - 如何判断两棵二叉树的内容是否相同?

java - BST 中的搜索操作

Java:哪个更快?局部变量还是访问封装?

java - switch 语句中的 String 如何比相应的 if-else 语句更有效?