Java搜索整个树的最小值

问题描述:

这不是一个二叉搜索树,也没有遵循任何严格的规则。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

也许问题是根本不存在的孩子,你回来-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