Java 为什么我需要一个助手方法来递归搜索二叉搜索树?

Java 为什么我需要一个助手方法来递归搜索二叉搜索树?,java,recursion,binary-search-tree,helpermethods,Java,Recursion,Binary Search Tree,Helpermethods,以下是二进制搜索树的实现代码: 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)

以下是二进制搜索树的实现代码:

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);
}
公共类BST{
节点根;
公共T搜索(T目标)
{
//循环遍历节点并确定要创建的路由
BSTNode tmp=根节点;
while(tmp!=null)
{
//c可以有3个值
//0=找到目标
//(负)=向左走,目标更小
//(正)=向左,目标大于当前位置
INTC=目标比较(tmp数据);
如果(c==0)
{
返回tmp.data;
}

否则如果(c该方法需要一个起点。它需要有一个不变的目标节点,并需要将其与其他节点进行比较,以确定它们是否匹配。让我们调用此节点
current
,而不是
root
,因为它是递归方法正在计算的当前节点。当usi使用一个递归方法,而不是使用一个helper函数并传入两个变量(许多递归方法都是这种情况)。正如您所说,如果您更新了根目录,您将在向左或向右移动时完全更改树,而您不希望这样做。之所以使用帮助函数,是因为它为递归方法提供了一个起点。它还跟踪您正在处理的
当前
节点,因为您所说的方法指向正在处理的节点对象已计算,但不进行任何更改。向左或向右移动时,它不会修改任何内容,只会传入对左或右节点的引用,并继续执行此操作,直到找到目标或基本情况为止。

最好询问原始开发人员,但..假设root是(应该是)private,另一段代码如何调用
new BST().recSearch(target,root)
?既然它是private成员,它从哪里获得
this.root