簡體   English   中英

Java遞歸二叉樹

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM