将对象添加到二叉搜索树

时间:2012-03-18 18:20:24

标签: java binary-search-tree

我对BST完全不熟悉,如果这是完全错误的话它们是如何工作的,如果我能得到一个参考网站的链接,我将不胜感激。现在我正在编写一个程序,将ArrayList String的值添加到BST中,我想出了类型为{{compareTo(Node)方法未定义的错误1}}。我认为让ArrayList<String>代表比较extends Comparable值,但我没有使用ArrayList。此外,我必须添加一个转换为s来设置它作为根,但我觉得有一个更简单的方法。我不知道我是否可以按照我的方式添加E值,这就是它在我用于参考的书中的样子。这是我的代码,任何帮助将不胜感激,我已经尝试在Java API中查找并没有帮助:

ArrayList

3 个答案:

答案 0 :(得分:1)

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

s.compareTo(n)&lt; 0

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

答案 1 :(得分:1)

我认为此引用对您有所帮助:Binary Search Trees - Stanford Library

答案 2 :(得分: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;
}