java - 二叉搜索树改变insert方法返回类型

标签 java binary-search-tree

我为二叉搜索树编写了一个 void 的插入方法。我必须更改该方法,以便它返回一个 boolean 值,但我很困惑,因为我的插入辅助方法返回一个节点。

有没有办法编写一些其他返回 boolean 值的辅助方法?如果不是,我将如何更改我的方法以返回 boolean

这是我的方法:

public void insert(E s) 
{
    root = insert(s, root);
    root.setParent(findParent(root.getData()));
} 

private Node<E> insert(E s, Node<E> T)
{
    //easiest case, empty tree, create new tree
    if(T == null)
    {
        T = new Node<E>(s);
    }
    //s is greater than T, insert on right subtree
    else if(s.compareTo(T.getData()) > 0)
    {
        T.setRight(insert(s, T.getRight()));
    }
    //s is less than T, insert on left subtree
    else if (s.compareTo(T.getData()) < 0)
    {
        T.setLeft(insert(s,T.getLeft()));
    }
    else
    {
        System.out.println("Item already present.");

    }
    return T;
}//Close insert

最佳答案

我假设如果插入成功,您应该返回 true ,否则返回 false ?将您的第一个 insert 函数更改为如下所示:

public boolean insert(E s) 
{
    try {
        root = insert(s, root);
        root.setParent(findParent(root.getData()));
        return true;
    } catch (Exception e) {
        return false;
    }
}

并更改辅助函数,以便如果该项目已存在,它会抛出异常(以便主插入函数捕获并触发 false 返回)。

private Node<E> insert(E s, Node<E> T) throws Exception {
    ...
    else {
        System.out.println("Item already present.");
        throw new Exception("Item already present.");
    }
    return T;
}

或者(正如图坦卡门建议的那样)在插入不成功的情况下从辅助方法返回 null,因此您可以:

public boolean insert(E s) 
{
    root = insert(s, root);
    if (root == null) {
        return false;
    }
    root.setParent(findParent(root.getData()));
    return true;
}

private Node<E> insert(E s, Node<E> T) {
    ...
    else {
        System.out.println("Item already present.");
        return null;
    }
    return T;
}

关于java - 二叉搜索树改变insert方法返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260992/

相关文章:

algorithm - B 树和 BST 用例

java - 如何从 FilteredReader 中获取 XML 文档?

java - 编写二叉搜索树的插入方法

java - 如何将BST的所有数据存储到一个数组列表中?

c# - 调整二叉树的范围搜索以获得外部元素

C#最有效的数据结构,可插入和删除下半部分

java - 仅使用 isAbove() 函数查找点 isUnder()

具有自定义类的 BufferedReader 的 java.lang.StackOverflowError

java - 什么都不做的抽象方法实现

java - 我可以在 Eclipse IDE 的一个 Java 项目中拥有同名的类吗?