树中的最小值

时间:2015-05-06 16:45:29

标签: java tree minimum

我必须找到树中的最小数字。我写了这个,但它没有用。我需要更改才能正常运行?我知道它不会占用树中的每一个值。但我不知道该改变什么工作。

public class MinTree {

    static Tree tree = new Tree( 24, 
                 new Tree( 45, 
                     null , 
                     new Tree(8, null , null) ) , 
                 new Tree ( 17, 
                     new Tree (74 , null , null ) , 
                     null ) );

    public int findMin(Tree tree){
        int min = 99999;
        Tree left, right;
        if(min > tree.getVal())
            min = tree.getVal();
        System.out.println(min + " ");
        if(tree.left() != null)
            return findMin(tree.left());
        if(tree.right() != null)
            return findMin(tree.right());


        return min;
    }

    public static void main(String[] args){
        MinTree mt = new MinTree();
        System.out.println("Minimum is :" + mt.findMin(tree));
        }
}

树类:

class Tree {

   public int obj;
   private int val;
   private Tree left, right;

   public Tree(int val, Tree left, Tree right){
     this.val = val;
     this.left = left;
     this.right = right;
   }

   public int getVal(){
      return val;
   }

   public Tree left(){
      return left;
   }

   public Tree right(){
      return right;
   }
}

1 个答案:

答案 0 :(得分:0)

现在,它只会返回最左边树的最小值。

请参阅函数findMin(Tree tree),说明它必须返回findMin(tree.left())的值,因为您没有将此值与min进行比较,只是返回它。

每当函数找到返回码时,它将返回该值并完成该函数。所以,你应该这样做:

if(tree.left() != null){
  int j = findMin(tree.left());
  if (j<min){
      min = j;
  }
}

对于tree.right也一样。这样,它只需要树的最小值。

另外,为什么要宣布两棵未被使用的树?我的意思是Tree left, right,它没有做任何事情也没有使用它们。

此外,在System.out.println("Minimum is :" + mt.findMin(tree));,可能是系统无法识别全局变量树。