二叉树Java中的搜索功能

时间:2014-05-12 23:22:46

标签: java search tree binary-tree binary-search-tree

我正在为我正在研究的项目创建二叉树的过程,我按名称将人们插入到二叉树中(树遍历每个字符以确定插入时哪个更大)。有没有办法让我的树搜索树,找到一个匹配程序名称的人。到目前为止,这是我的代码

lass Node {
private String person;
private Node left;
private Node right;

public Node(String person) {
    this.person = person;
    left = null;
    right = null;
}

//setters
protected void setLeft(Node left) {
    this.left = left;
}

protected void setRight(Node right) {
    this.right = right;
}

//getters
protected String getPerson() {
    return person;
}

protected Node getLeft() {
    return left;
}

protected Node getRight() {
    return right;
}
}

public class BinaryTree {
private static Node root; 

public BinaryTree() {
    root = null;
}

public void insert(String person) {
    root = insert(person, root);
}

//Check if node is leaf
public static boolean isLeaf() {
    if(root.getLeft() == null && root.getRight() == null)
        return false;
    else
        return true;
}

// Search tree for entered value

public static void searchTree(String search, Node tNode) {
// Not sure what to put into the part to make the method search through people in the tree
    }

    private Node insert(String person, Node tree) {
    if(tree == null)
        tree = new Node(person);
    else {
        int count = 1;
        int x = 0;
        while(person.toLowerCase().charAt(x) == tree.getPerson().toLowerCase().charAt(x) && count != tree.getPerson().length()) {
            count = count + 1;
            x = x + 1;
        }
        if(person.toLowerCase().charAt(x) != tree.getPerson().toLowerCase().charAt(x)) {
            if(person.toLowerCase().charAt(x) < tree.getPerson().toLowerCase().charAt(x))
                tree.setLeft(insert(person, tree.getLeft()));
            else
                tree.setRight(insert(person, tree.getRight()));
        } else {
            tree.setRight(insert(person, tree.getRight()));
        }
    }
    return tree;

}

您能否建议我应该如何创建一种搜索树的方法

2 个答案:

答案 0 :(得分:0)

我建议你做这些步骤。这些步骤将为您提供一个开始。

  1. 从root开始,使用compareToIgnoreCase()将要搜索的名称与root进行比较。
  2. 根据结果向左或向右移动。
  3. 继续,直到任一节点变为空或找到匹配。

答案 1 :(得分:0)

如果您正在尝试实现二进制搜索树,则需要更改setter中的代码以确定是否每次将这些方法添加到左侧或右侧节点(通过按字典顺序比较字符串)叫做。如果未订购树,则必须搜索每个节点。订购后,您将能够在日志时间内进行搜索。