构造搜索二叉树的方法



我构建了一个二叉搜索树,它将根据人们的名字对他们进行排序,其代码是:

类人的代码:

package Tree;
public class Person {
private int age;
private String name;
private String gender;
public Person( String name, String gender,int age) {
    this.age = age;
    this.name = name;
    this.gender = gender;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
@Override
public String toString() {
    return "Person [age=" + age + ", name=" + name + ", gender="
            + gender + "]";
}
}

搜索树代码为:

package Tree;
public class BinarySearchPerson {
private boolean empty;
private Person person;
private BinarySearchPerson left;
private BinarySearchPerson right;
public BinarySearchPerson(Person person, BinarySearchPerson left,
        BinarySearchPerson right) {
    this.empty = false;
    this.person = person;
    this.left = left;
    this.right = right;
}
public BinarySearchPerson() {
    this.empty = true;
}
public boolean isEmpty() {
    return empty;
}
public Person getPerson() {
    if (isEmpty()) {
        throw new IllegalStateException(
                "Trying to access root of an empty tree");
    }
    return person;
}
public void setPerson(Person person) {
    this.person = person;
}

public BinarySearchPerson getLeft() {
    if (isEmpty()) {
        throw new IllegalStateException(
                                        "Trying to access subtree of an empty tree");
    }
    return left;
}

public void setLeft(BinarySearchPerson left) {
    this.left = left;
}

/**
 * gets the right subtree of this node
 */
public BinarySearchPerson getRight() {
    if (isEmpty()) {
        throw new IllegalStateException(
                                        "Trying to access subtree of an empty tree");
    }
    return right;
}

public void setRight(BinarySearchPerson right) {
    this.right = right;
}

public static BinarySearchPerson insert(Person person, BinarySearchPerson bt){
    int n = person.getName().compareTo(bt.getPerson().getName());

    if (n<0){
        if(bt.getLeft().isEmpty() == true){
             BinarySearchPerson newLeft = new BinarySearchPerson(person,new BinarySearchPerson(),new BinarySearchPerson());
             bt.setLeft(newLeft);
             return bt;
        }
        else{
            insert(person, bt.getLeft());
            return bt;
        }
    }
    if (n>0){
        if(bt.getRight().isEmpty() == true){
             BinarySearchPerson newRight = new BinarySearchPerson(person,new BinarySearchPerson(),new BinarySearchPerson());
             bt.setRight(newRight);
             return bt;
        }
        else{
            insert(person, bt.getRight());
            return bt;
        }
    }
    else return bt;

}

public static int lookupAge(String name) {
    Person person = 
    if (name.compareTo(person.getName())==0){
        return person.getAge();
    }
    else return -1;
}


}

以及我一直用来测试它的代码:

package Tree;
public class TreeTest {
public static void main(String[] args) {
    Person p = new Person("John", "M",32);
    Person p1 = new Person("Alex", "M",15);   
    Person p2 = new Person("Tom", "M",24);   
    Person p3 = new Person("Bill", "M",23);  
    Person p4 = new Person ("Jackson", "F", 50);  
    BinarySearchPerson bt = new BinarySearchPerson(p,new BinarySearchPerson(),new BinarySearchPerson());
    BinarySearchPerson bt1 = BinarySearchPerson.insert(p1, bt);
    BinarySearchPerson bt2 = BinarySearchPerson.insert(p2, bt1);
    BinarySearchPerson bt3 = BinarySearchPerson.insert(p3, bt2);
    BinarySearchPerson bt4 = BinarySearchPerson.insert(p4, bt3);
    System.out.println("alex".compareTo("john"));
    System.out.println(bt4.getLeft().getRight().getRight().getPerson().getName());

}
}

该方法有效并且可以很好地对名称进行排序。我现在要做的是创建一个新方法

查找年龄(字符串名称(;

可用于在树中搜索一个人的名字。我对如何做到这一点有一个粗略的想法,但我正在努力解决创建此方法的语法。该方法必须能够像这样调用:

bt.lookupAge("Tom");

这应该返回 24,这是汤姆的年龄。

我需要浏览树才能找到 tom,但该方法只有参数名称,所以我不知道如何引用树 bt。 我以前从未以这种方式制作过方法,只需包含我需要使用的所有参数即可。如果是这样,我会没事

lookupAge(String Name, BinarySearchPerson bt);

但我不能将树作为参数包含在内。

任何帮助都会很棒,谢谢。

在 BinarySearchPerson 类中编写方法,使其看起来像

public int lookupAge(String name) {...

编写完成后,如果有人像您的示例中一样调用该方法,bt.lookupAge("Tom") ,"this"参数将引用bt。 然后,您将this.person.getName()与 name 进行比较,并返回 this.person.getAge((,或者返回类似 this.lookupAge(getRight().getPerson().getName())

最新更新