2013-03-17 63 views
1

這不是一個二叉搜索樹,也沒有遵循任何嚴格的規則。Java搜索整個樹的最小值

唯一的規則是每個節點是一個正整數,並且每個節點可以沒有子節點,一個左子節點或兩個子節點。 (不只是一個正確的孩子)。

我想穿過整個樹使用遞歸,並返回我發現完成後的最小值。

我會很感激,如果你沒有修改方法的簽名或分開使用任何額外的方法從Math.min()

public static int minValue(MyNode n) { 
    int root, left, right; 
    int min = -1; 
    if (n.obj != null) { 
     root = (int) n.obj; 
     left = minValue(n.left); 
     right = minValue(n.right); 
     if (left < right) 
      min = left; 
     else 
      min = right; 
     if (root < min) 
      min = root; 
    } 
    return min; 
} 
+3

這是什麼問題? – 2013-03-17 23:15:48

+0

你的問題是什麼? – meriton 2013-03-17 23:15:51

+0

我不知道我的方法有什麼問題,任何人都可以看到它出錯的地方嗎? – Ciphor 2013-03-17 23:17:05

回答

2

也許問題是根本不存在的孩子,你回來-1,但後來你不會指望這種可能性。您需要從分析中刪除-1:

public static int minValue(MyNode n) { 
    int root, left, right; 
    int min = -1; 
    if (n != null) { 
     root = (int) n.obj; 
     left = minValue(n.left); 
     right = minValue(n.right); 
     if (left > -1){ 
      if(right > -1){ 
       min = Math.min(left, right); 
       min = Math.min(root, min); 
      } 
      else{ 
       min = Math.min(left, root); 
      } 
     } 
     else{ 
      min = root; 
     } 
    } 
    return min; 
} 
+0

@JakubZaverka這是如何從分析中消除-1的? – SGM1 2013-03-17 23:49:11

+0

@ SGM1'if(left> -1)' – 2013-03-17 23:51:42

+0

@JakubZaverka哦,您的意思是從實際返回,-1對於此算法的實際分析仍然至關重要,因爲所有節點都是正數;或至少是我認爲'分析'的意思。 – SGM1 2013-03-18 00:33:56