我已经建立了一个二叉搜索树,将根据他们的名字的人分开,这样做的代码是:构建方法来搜索二叉树
的Person类代码:
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());
}
}
该方法适用于并正确排列名称。我现在想要做的是创建一个新方法
lookupAge(String name);
可以用来在树上搜索一个人的名字。我对如何做到这一点有一个粗略的想法,但我正在努力创建这种方法的语法。该方法必须能够被称为:
bt.lookupAge("Tom");
并且应该返回24,这是汤姆的年龄。
我需要通过树来查找汤姆,但该方法只有参数名称,所以我不知道如何参考树bt。我从来没有用过这种方法,只是包含了我需要使用的所有参数。我会没事的,如果它是
lookupAge(String Name, BinarySearchPerson bt);
但我不能包括树作为参数。
任何帮助将是伟大的,谢谢。
这很好,谢谢。 – 2014-12-06 17:41:17