2012-03-18 30 views
1

我完全不熟悉BST,以及它们如何工作,如果这是完全错误的,将不胜感激,如果我可以获得链接到参考网站或其他东西。现在我正在编写一个程序,将ArrayListString s的值添加到BST中,并且我提出了诸如以下错误:compareTo(Node)的方法未定义为ArrayList<String>类型。我认为有extends Comparable它会考虑比较ArrayList值,但我不使用E。此外,我不得不添加一个演员来设置它为根,但我觉得有一个更简单的方法。我不知道我是否可以按照我所做的方式添加ArrayList值,这只是它在我用作参考的书中的外观。这是我的代码,任何帮助,将不胜感激,我已经尝试过Java API中查找的东西,并没有帮助:将对象添加到二叉搜索树

public class BinarySearchTree<E extends Comparable<? super E>> 

{ 

    public void add(ArrayList<String> s, Node n) { 


      if (n == null) 
       n = (Node) s; 
      else if (s.compareTo(n) < 0) 
       add(s, n.leftChild); 
      else 
       add(s, n.rightChild); 


    } 
} 
+0

究竟是“加()”吗?好像你正在尝试将ArrayList添加到BST中,而不是将值FROM和ArrayList添加到BST中 – mfrankli 2012-03-18 18:25:30

回答

0

它看起来像你正试图将整个ArrayList中添加为一个节点你的BST。我的猜测是你应该从ArrayList的元素构建一个BST。为此,我建议定义两个函数:

public Node add(ArrayList<String> s, Node root) { 
    for (String elt : s) { 
     root = add(elt, root); 
    } 
} 

public Node add(String elt, Node root) { 
    if (root == null) { 
     root = // new Node with data set to elt 
    } else if (elt.compareTo(n.data()) < 0) { 
     root.left = add(elt, root.left); 
    } else if (elt.compareTo(n.data()) > 0) { 
     root.right = add(elt, root.right); 
    } else { 
     // duplicate element being inserted -- error? 
    } 
    return root; 
} 
+0

是的,我必须将ArrayList中的每个元素添加到BST中。感谢您的帮助!一个问题,但是,你是什么意思由n.data()。我应该将n设置为ArrayList中的每个值吗? – 2012-03-18 18:44:22

1

首先,Node类应该扩展Comparable并覆盖其中的compareTo方法。 ArrayList类不延伸可比,因此以下将不工作

s.compareTo(n)的0 <

S是一个ArrayList参考。此外,您正尝试将ArrayList引用与完全不正确的节点引用进行比较。您需要比较两个节点值。