[英]Java recursive binary tree
歡迎! 我有一個名為less的遞歸公共靜態方法,該方法帶有一個樹節點(原始的二叉樹,而不是搜索樹),以及一個int參數,如果樹中的所有值均小於整數,則返回該參數。 因此,我將使用public class TN { public int value; public TN left, right; public TN(int v, TN l, TN r) {value = v; left = l; right = r;} }
public class TN { public int value; public TN left, right; public TN(int v, TN l, TN r) {value = v; left = l; right = r;} }
public class TN { public int value; public TN left, right; public TN(int v, TN l, TN r) {value = v; left = l; right = r;} }
因此,我的方法如下所示:
public static boolean less(TN s, int toFind){
if (s == null)
return true;
else{
if(s.value <= toFind)
return less(s.left, toFind) && less(s.right, toFind); // right here do I return true? or do I have to somehow recall recursively
else
return false;
}
我想知道這是對的還是我錯過了什么? 我必須返回真假嗎?
有很多優雅的,OO方法來編寫此代碼。 我的建議是使less()
成為TN
類的非靜態成員函數。 這樣,如果樹的根節點稱為root
,則只需調用root.less()
。 每次對less()
調用都會調用left.less()
和right.less()
。
由於您發布的示例代碼甚至無法編譯,所以我想知道您是使用IDE還是嘗試使用javac
編譯類。 如果您不熟悉Java,我強烈建議您使用Eclipse,Netbeans或其他IDE。
return less(s, toFind);
應該:
return less(s.left, toFind) && less(s.right, toFind);
我不知道為什么該功能是靜態的。
如前所述,您的第一部分應該是:
if (s == null) return true;
(編輯:當所有節點都滿足條件時,這將使您獲得真實的結果。其中有==,應為<)。 編輯:好的,除了我提到的問題之外,您還有很多問題。 您需要在邏輯上逐步執行代碼。
您需要遍歷樹,因此需要在子節點上調用函數。 接下來,您需要返回true作為默認結果。 這樣,當您得到的數字大於所需的數字時,您可以立即返回false,而無需遍歷任何子級。 我希望我已經為您提供了足夠的邏輯幫助您自己完成其余部分。
首先,在進行比較時, if (s = null)
應該是if (s == null)
,而不是將s
的值設置為null
。
該語句return less(null, toFind);
不斷調用您的方法-您將溢出堆棧。
請注意,您的函數不可能永遠返回true
因為每次終止遞歸時,您都將返回false
? 問題出在您的第一次檢查中。 您說“樹中的所有值都小於整數”。 嗯,在一棵空樹中,所有值(沒有值)確實小於任何整數,因此在這種情況下,您應該返回true
。
另外,當您說“小於”時,您是在進行相等性比較,因此實際上是在檢查所有值是否等於整數,而不是等於整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.