2014-12-06 104 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