2015-04-04 83 views
0

我有这个东西比较不与二叉树工作

Comparator.java

public interface Comparator<T> { 
    public int compareTo(int num); 
} 

valueComparator.java

public class valueComparator implements Comparator<Tree.Node> { 
    @Override 
    public int compareTo(Tree.Node obj, int number) { 
     if (obj.getDataNumber() == number) { 
      return 0; 
     } 
     else if (obj.getDataNumber() < number) { 
      return -1; 
     } 
     else return 1; 
    } 
} 

Tree.java

public class Tree { 
    public Node root; 

    Tree() { 
    } 

    public static class Node { 

     Node(int number, String str, boolean flag) { 
      dataNumber = number; 
      dataText = str; 
      dataBool = flag; 
     } 

     public int getDataNumber() { 
      return this.dataNumber; 
     } 

     public String getDataText() { 
      return this.dataText; 
     } 

     public boolean getDataBool() { 
      return this.dataBool; 
     } 

     public void setDataText(String text) { 
      this.dataText = text; 
     } 

     public void isDataBool(boolean flag) { 
      this.dataBool = flag; 
     } 

     Node left; 
     Node right; 
     private int dataNumber; 
     private String dataText; 
     private boolean dataBool; 

    } 

    public void binaryTree() { 
     root = null; 
    } 

    public boolean search(int number) { 
     return search(root, number); 
    } 

    valueComparator comp = new valueComparator(); 

    private boolean search(Node node, int number) { 
     if (node == null) { 
      return false; 
     } 
     if (comp.compareTo(node, number) == 0) { 
      return true; 
     } 
     if (comp.compareTo(node, number) == -1) { 
      return search(node.left, number); 
     } 
     else { 
      return search(node.right, number); 
     } 
    } 

    public void insertLeaf(int number, String str, boolean flag) { 
    root = insertLeaf(root, number, str, flag); 
    } 
    private Node insertLeaf(Node node, int number, String str, boolean flag) { 
     if (node == null) { 
      node = new Node(number, str, flag); 
     } else { 
      if (number < node.dataNumber) { 
       node.left = insertLeaf(node.left, number, str, flag); 
      } 
      else if (number > node.dataNumber) { 
       node.right = insertLeaf(node.right, number, str, flag); 
      } 
      else { 
       System.out.println("The element is already in the tree."); 
      } 
     } 
     return node; 
    } 
} 

Test.java

public class Test { 
    public static void main(String args[]) { 

     Tree binTree = new Tree(); 
     binTree.binaryTree(); 
     binTree.insertLeaf(5, "text2", true); 
     binTree.insertLeaf(4, "text4", false); 
     binTree.insertLeaf(1, "text1", true); 
     binTree.insertLeaf(3, "text3", true); 
     binTree.insertLeaf(2, "text5", false); 
     System.out.println("Element 3 found: " + binTree.search(3)); 
    // Element 3 found: false 
    } 
} 

我应该做一个比较搜索,但我不明白的逻辑。 compareTo方法可以自己工作,但它会搜索递归调用。第一遍之后,如果compareTo的返回值不为0,那么它将与null一起输入并跳出递归并返回false。意思是如果我将树的第一个元素设置为'3',搜索(3)将返回true,但是如果它不同于3 - false并且甚至不会在树中查找它。

+0

您可以为正在使用的编程语言添加标签吗? – 2015-04-04 11:29:03

+0

请发布真正的代码,编译。您的比较器无法编译。 – 2015-04-04 11:38:00

+0

对不起。这只是我第一次在这里发布:D – 2015-04-04 11:44:04

回答

1

当您在插入一个数字时,您直接将其与节点的值进行比较,如果该数字小于当前节点中存储的值,则按照left指针。

但是当你为一些搜索,你用一个比较,该节点的值进行比较,给出的数字(注意顺序相反!),如果该号码在当前节点小于该值,则请按照right链接。

按照您的意愿使用直接比较或比较器 - 但在任何地方都使用相同的方法。

+0

你,我的朋友,值得一杯啤酒!谢谢! – 2015-04-04 12:29:46

+0

而不是感谢评论中的某个人,接受他的回答和/或向上投票(请参阅http://stackoverflow.com/help/someone-answers) – muued 2015-04-04 13:07:23

+0

我不行。我没有足够的声望点;) – 2015-04-04 16:43:39