2014-12-06 118 views
-1

我已经建立了一个二叉搜索树,将根据他们的名字的人分开,这样做的代码是:构建方法来搜索二叉树

的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); 

但我不能包括树作为参数。

任何帮助将是伟大的,谢谢。

回答

0

写你的方法在BinarySearchPerson类,以便它看起来像

public int lookupAge(String name) {... 

一旦写,如果有人致电就像你的榜样,bt.lookupAge("Tom")中,“这个”参数将参考bt的方法。然后,您会将this.person.getName()与名称进行比较,并返回this.person.getAge(),或返回类似this.lookupAge(getRight().getPerson().getName())

+0

这很好,谢谢。 – 2014-12-06 17:41:17