搜索BST

时间:2012-03-21 20:28:44

标签: java binary-search-tree

我创建了一个BST,它将每个节点设置为一个String值,我想知道是否有办法搜索树,但一次只能搜索一个值。所以说节点中的字符串是“卡车”有没有办法搜索树并返回“t”?这是我构建树的代码:

public class BinaryTree {

public Node root;
public BinaryTree tree;
public static int pos;
public static Node[] theArray;

private static class Node {
    Node left;
    Node right;
    String data;

    Node(String s) {
        left = null;
        right = null;
        data = s;
    }
}

public BinaryTree plantTree(ArrayList<String> dict) {

    tree = new BinaryTree();

    Collections.shuffle(dict);

    for (String s : dict) {
        s.toUpperCase();
        tree.add(s);
    }

    return tree;

}

/**
 * Creates an empty binary tree
 */
public BinaryTree() {
    root = null;
}

public void add(String data) {
    root = add(root, data);
}

private Node add(Node node, String data) {
    if (node == null) {
        node = new Node(data);
    } else {
        if (data.compareTo(node.data) > 0) {
            node.left = add(node.left, data);
        } else {
            node.right = add(node.right, data);
        }
    }

    return (node);
}

}

3 个答案:

答案 0 :(得分:1)

也许我误解了你的问题,但听起来你想要一些东西来遍历树。我会使用访客模式。 (这听起来像家庭作业,所以为什么不使用标准模式。:))

public class Node<T>{ 
...
    public void visitDepthFirst(Visitor<T> v){
        v.visit(this);
        if (left != null){
            left.visitDepthFirst(v);
        }
        if (right != null){
            right.visitDepthFirst(v);
        }
    }
}

interface Visitor<T>{
    public void visit(T t);
}
...
Node<String> root = ...;
root.visitDepthFirst(new Visitor<String>(){
    public visit(String val){
        if ("truck".equals(val)){
            // do something
        }
    }
});

我会让你弄清楚广度搜索。此外,使用泛型可以更方便地使用节点类。你的班级结构有点令人困惑。我建议你只使用节点AS树本身。毕竟,树中的每个节点都是树本身。 (阅读复合模式)

答案 1 :(得分:0)

所以看来你试图只用第一个字母搜索你的树。这将与返回整个单词一样长。所以你仍然需要使用BST遍历或搜索算法。

答案 2 :(得分:0)

  

所以说节点中的字符串是“卡车”有搜索方式   通过树并返回“t”?

真的,我不知道这个问题是什么 如果您有BST,则使用二进制搜索进行搜索。就是这样。

如果找到该元素,二进制搜索将返回true。您可以实现自己的BST,而不是在问题boolean中返回Char而是t,如果值不是树的一部分,则返回null