1

二分探索木を実装するコードは次のとおりです。

public class BST<T extends Comparable<T>> {

BSTNode<T> root;




public T search(T target)
{
    //loop to go through nodes and determine which routes to make
    BSTNode<T> tmp = root;
    while(tmp != null)
    {
        //c can have 3 values
        //0 = target found
        //(negative) = go left, target is smaller
        //(positive) = go left, target is greater than current position
        int c = target.compareTo(tmp.data);

        if(c==0)
        {
            return tmp.data;
        }
        else if(c<0)
        {
            tmp = tmp.left;
        }
        else
        {
            tmp = tmp.right;
        }

    }
    return null;
}

/*
 * Need a helper method
 */
public T recSearch(T target)
{
    return recSearch(target, root);

}

//helper method for recSearch()
private T recSearch(T target, BSTNode<T> root)
{
    //Base case
    if(root == null)
        return null;

    int c = target.compareTo(root.data);

    if(c == 0)
        return root.data;
    else if(c<0)
        return recSearch(target, root.left);
    else
        return recSearch(target, root.right);
}

再帰ヘルパー メソッドが必要なのはなぜですか? 実行中の再帰プロセスを実行するために「this.root」を使用できないのはなぜですか? さらに、このメソッドが呼び出されているオブジェクトのルート プロパティを台無しにすることが問題である場合、ヘルパー メソッドはどのようにしてこれを防止するのでしょうか? this.root プロパティとは別のポインタを作成するだけなので、メソッドが呼び出されているオブジェクトのルート プロパティを台無しにすることはありませんか?

質問が単純に思えない場合は申し訳ありませんが、舞台裏で何が起こっているのかを誰かが教えてくれれば、本当に感謝しています.

4

1 に答える 1