2015-10-26 101 views
1

我有一棵樹,存儲鍵和它們的值。這裏是我的查找操作:樹與鍵值對未找到密鑰

public int find(int k) { 
    System.out.println(k + " : " + this.k); 
    if (k == this.k) { 
     return 1; 
    } 

    if (k < this.k){ 
     if (left != null) { 
      left.find(k); 
     } 
    } else { 
     if (right != null) { 
      right.find(k); 
     } 
    } 
    return 0; 
} 

這在嘗試查找樹的根時正常工作。例如,下面是輸入和查找密鑰的一些輸出:

enter image description here

c 5生成與單個鍵根節點。 (默認值爲0.0)

e 5調用我的find()函數,並以5,4,8,9 ..爲關鍵字。任何人都可以告訴我爲什麼,即使密鑰輸出爲匹配,他們不會返回1嗎?

在此先感謝!

回答

6

如果在根中找不到密鑰,則會在左側或右側孩子上遞歸調用方法,但是您忽略結果並返回0。嘗試

return left.find(k); 

return right.find(k); 

此外,看來你返回1,而不是一個值;我只在這裏看到與密鑰相關的代碼。你可能想在這裏返回一個值,而不是1。另外,0可以是有效值嗎?如果是這樣,返回0可能意味着您發現0或者您沒有找到匹配項。您可能想要拋出一個NoSuchElementException來表示找不到它,而不是返回0。

+0

美麗,正是我錯過了。謝謝!感謝您的意見,但是這是作業的一部分,我們被要求返回這些結果。一個單獨的函數返回值。 – Nic