1

我为二叉搜索树编写了一个插入方法,即void. 我必须更改该方法以使其返回 aboolean但我很困惑,因为我的 insert 辅助方法返回 a Node

有没有办法编写一些其他返回 a 的辅助方法boolean?如果没有,我将如何更改我的方法以返回 a 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
4

1 回答 1

1

我假设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;
}

或者(如 Tutankhamen 建议的那样)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;
}
于 2013-03-07T00:43:50.787 回答