2014-08-30 46 views
0
public int count(Vertex T, int start, int end, int count) { 

     if (T == null) { 
      return -1; 
     } 

     count(T.left,start,end,count); 
     int test=T.key; 
     if(test >=start && testKey<end){ 
      count++; 
     } 

     System.out.print(T.key+"#"+count+"# ");     
     count(T.right,start,end,count); 

     return count; 
    } 

我試圖在大於或等於我的開始數字且小於我的結束數字的自寫平衡搜索樹中計算數字數。遞歸獲取駐留在AVL樹中的數字的計數

到目前爲止我的平衡搜索樹是正確的,我現在唯一的問題是正確返回計數。我已經檢查了上面的代碼,它正確地計數匹配我的範圍的數字,但是我現在遇到的問題是我無法返回我需要的計數,因爲它會返回到0,因爲遞歸函數的性質呼叫。

如果我能得到建議以返回所需的計數,這將會有所幫助。

+0

請不要對該方法(或任何其他變量)的方法和參數使用相同的名稱。這會變得非常混亂。 – 2014-08-30 08:08:24

回答

1

count方法返回一個值,您可以忽略它。

您嘗試通過count作爲參數,但這不起作用,因爲Java使用按值調用。您不會通過參數取回結果。

取而代之,您希望它添加到計數中,並刪除count參數(改爲使其成爲局部變量)。例如:

count += count(T.left,start,end); 

在節點的話null你應該返回0,而不是-1。

另請注意,您正在做的工作量超過解決問題的必要量。例如,如果您訪問的節點爲< start,則不需要計算左側子樹,其中的所有節點都將小於start。與右子樹類似,如果節點是>= end

+0

謝謝,我想我已經得到它的工作與你的幫助。我明白我在做更多的工作,但有三種可能的情況1)所有值落在左邊2)所有值落在右側3)根可能在我指定的範圍中間,因此它會是兩端。 – 2014-08-30 09:14:37