1

である二分探索木の挿入メソッドを作成しましたvoid。を返すようにそのメソッドを変更する必要がありますがboolean、insertのヘルパーメソッドが。を返すため、混乱していますNode

を返す他のヘルパーメソッドを作成する方法はあり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
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;
}

または(ツタンカーメンが示唆しているように)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 に答える