Java 向二叉搜索树添加对象

Java 向二叉搜索树添加对象,java,binary-search-tree,Java,Binary Search Tree,我是BST的新手,他们是如何工作的如果这是完全错误的,如果我能得到一个参考网站或什么的链接,我将不胜感激。现在我正在编写一个程序,将Strings的ArrayList中的值添加到BST中,我遇到了一些错误,例如类型ArrayList的compareTo(Node)方法未定义。我认为通过使用extensedcomparable可以比较ArrayList值,但我没有使用E。此外,我还必须向s添加一个cast以将其设置为根,但我觉得有一种更简单的方法。我不知道是否可以按我的方式添加ArrayList值

我是BST的新手,他们是如何工作的如果这是完全错误的,如果我能得到一个参考网站或什么的链接,我将不胜感激。现在我正在编写一个程序,将
String
s的
ArrayList
中的值添加到BST中,我遇到了一些错误,例如类型
ArrayList
compareTo(Node)
方法未定义。我认为通过使用
extensedcomparable
可以比较
ArrayList
值,但我没有使用
E
。此外,我还必须向s添加一个cast以将其设置为根,但我觉得有一种更简单的方法。我不知道是否可以按我的方式添加
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);


    }
}

公共类BinarySearchTree看起来您正试图将整个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;
}
公共节点添加(ArrayList s,节点根){
用于(字符串elt:s){
根=添加(elt,根);
}
}
公共节点添加(字符串elt,节点根){
if(root==null){
root=//数据设置为elt的新节点
}else if(elt.compareTo(n.data())<0){
root.left=添加(elt,root.left);
}else if(elt.compareTo(n.data())>0){
root.right=添加(elt,root.right);
}否则{
//正在插入重复的元素--错误?
}
返回根;
}

首先,节点类应该扩展Comparable并覆盖其中的compareTo方法。ArrayList类不扩展Comparable,因此以下内容将不起作用

s、 比较(n)<0


它是一个ArrayList引用。另外,您试图将ArrayList引用与节点引用进行比较,这是完全错误的。您需要比较两个节点值

我认为这个参考资料会对您有所帮助:

add()到底是做什么的?似乎您正在尝试将ArrayList添加到BST中,而不是将和ArrayList中的值添加到BST中是的,我必须将ArrayList中的每个元素添加到BST中。谢谢您的帮助!但有一个问题,你所说的n.data()是什么意思。我应该为ArrayList中的每个值设置n吗?这是我见过的最好的引用之一。