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相同的功能。我怎樣才能改變這段代碼,使我只有getKey?
這是我在改變兩個功能的嘗試:
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在我的情況?
我還是個新手,當談到遞歸。這對我來說有點困難。 – TwilightSparkleTheGeek
您將不得不使用兩個引用來跟蹤您當前正在遞歸的位置,因爲您無法通過每次遞歸調用將引用傳遞給節點。你在搜索什麼類型的數據結構? – robbmj
我正在搜索二進制搜索樹。這是殺了我的男人。遞歸是。謝謝你的協助。我還有另一部分需要幫助。你能和我在一起嗎?我是計算機科學系的學生,本科生。 – TwilightSparkleTheGeek