Java 如何更改这段代码,使我只有getKey? private void searchForK(V值,DictionaryNode节点){ 如果(节点!=null){ 如果((可比较)值).compareTo(节点值)==0){ 获取密钥=node.key; 返回; } searchForK(value,node.lChild);//递归,因为我们只需查看 searchForK(value,node.rChild);//通过本身是另一个searchForK的每个子级 } } 公共K getKey(V值){ searchForK(值,rNode); 返回获取密钥; }//结束getKey

Java 如何更改这段代码,使我只有getKey? private void searchForK(V值,DictionaryNode节点){ 如果(节点!=null){ 如果((可比较)值).compareTo(节点值)==0){ 获取密钥=node.key; 返回; } searchForK(value,node.lChild);//递归,因为我们只需查看 searchForK(value,node.rChild);//通过本身是另一个searchForK的每个子级 } } 公共K getKey(V值){ searchForK(值,rNode); 返回获取密钥; }//结束getKey,java,Java,如何将上述代码更改为getKey的函数?我对递归感到困惑。我想去掉searchForK函数,让getKey具有与searchForK相同的函数 以下是我尝试更改两个功能的步骤: private void searchForK(V value , DictionaryNode<K,V> node){ if(node != null){ if(((Comparable<V>)value).compareTo(node.value) ==

如何将上述代码更改为getKey的函数?我对递归感到困惑。我想去掉searchForK函数,让getKey具有与searchForK相同的函数

以下是我尝试更改两个功能的步骤:

private void searchForK(V value , DictionaryNode<K,V> node){
        if(node != null){
            if(((Comparable<V>)value).compareTo(node.value) == 0) {
                obtainKey = node.key;
                return;
            }
            searchForK(value,node.lChild); //recursive since we have to simply look
            searchForK(value,node.rChild);//through each child which is itself another searchforK
        }       
    }

public K getKey(V value) {
    searchForK(value,rNode);
    return obtainKey;

}//end getKey
public K getKey(V值){
//私有void searchForK(V值,DictionaryNode节点){
if(rNode!=null){
如果((可比较)值).compareTo(节点值)==0){
获取密钥=rNode.key;
返回(K)获取密钥;
}
rNode=rNode.lChild;
getKey(值);
rNode=rNode.rChild;
getKey(值);
}   
返回null;
但它的行为方式不同,我做错了什么

以下是我的全局变量:

public K getKey(V value) {
        //  private void searchForK(V value , DictionaryNode<K,V> node){
        if(rNode != null){
            if(((Comparable<V>)value).compareTo(rNode.value) == 0) {
                obtainKey = rNode.key;
                return (K) obtainKey;
            }
                rNode = rNode.lChild;
                getKey(value);
                rNode = rNode.rChild;
                getKey(value);
            }   
        return null;
公共类BinarySearchTree实现DictionaryADT{
/*数据字段*/
/*节点变量*/
公共字典节点rNode;//根节点
公共字典节点pNode;//父节点
K获取密钥;
在我的例子中,我应该用rNode替换curNode吗?

private DictionaryNode curNode=rNode;
public class BinarySearchTree<K,V> implements DictionaryADT<K,V> {
    /* data fields */

    /* Node Variables */
    public DictionaryNode<K,V> rNode; //Root Node
    public DictionaryNode<K,V> pNode; //Parent Node
    K obtainKey;
公共K getKey(V值){ if(curNode!=null){ int c=((可比较)curNode.value).compareTo(值); 如果(c==0){ K key=curNode.key; curNode=rNode;//重置curNode 返回键; } else if(c<0&&curNode.lChild!=null){ curNode=curNode.lChild; 返回getKey(值); } else if(curNode.rChild!=null){ curNode=curNode.rChild; 返回getKey(值); } } curNode=rNode;//重置curNode 返回null;

}

对于递归,我还是个新手。这对我来说有点困难。你必须使用两个引用来跟踪当前递归的位置,因为你不能在每次递归调用中将引用传递给节点。你在搜索什么类型的数据结构?我在搜索二叉搜索树。这让我很头疼。rec是的。谢谢你帮我。我还有另一个地方需要帮助。你能和我呆在一起吗?我是计算机科学专业的本科生。我假设这棵树是平衡的,所以它可以在O(logn)中烧焦时间?为什么你的DictionaryNode在函数之外?啊,我知道你现在在做什么,一秒钟你在做什么?你怎么知道我在做什么?我想你已经实现了一个带有链表的二叉树,你想按顺序遍历树,返回第一个节点的键,该键的值等于传递给g的初始值etKey。这正是我正在做的。:D。但是我不知道我将把curNode变量放在哪里。我如何将rNode传递给我的函数getKey?当它应该只取一个V值时。
private DictionaryNode<K,V> curNode = rNode;

public K getKey(V value) {

    if (curNode != null) {
         int c = ((Comparable<V>)curNode.value).compareTo(value);

         if (c == 0) {

              K key = curNode.key;

              curNode = rNode; // reset curNode
              return key;
         }
         else if (c < 0 && curNode.lChild != null) {
              curNode = curNode.lChild;
              return getKey(value);
         }
         else if (curNode.rChild != null) {
              curNode = curNode.rChild;
              return getKey(value);
         }
    }
    curNode = rNode; // reset curNode
    return null;