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
如何将上面的代码变成getKey的一个函数?我对递归感到困惑。我想摆脱 searchForK 函数,让 getKey 具有与 searchForK 相同的功能。
这是我尝试改变这两个功能:
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;
虽然它的行为方式不同,但我做错了什么?
这些是我的全局变量:
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;
在我的情况下,我应该用 rNode 替换 curNode 吗?
最佳答案
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;
关于java - 我该如何更改这段代码,以便我只有 getKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483732/