二分探索木を実装するコードは次のとおりです。
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 プロパティとは別のポインタを作成するだけなので、メソッドが呼び出されているオブジェクトのルート プロパティを台無しにすることはありませんか?
質問が単純に思えない場合は申し訳ありませんが、舞台裏で何が起こっているのかを誰かが教えてくれれば、本当に感謝しています.