2014-12-05 69 views
0

我一直在麻煩使這個二叉搜索樹工作。這個想法是,一個人被放入,然後根據他們的名字進行排序。排序在二叉搜索樹中的問題

我使用人的類是:

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 static BinarySearchPerson left; 
private static 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.person.getName()); 


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

     } 
    } 

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


} 



} 

我得到的問題是所謂的插入排序的方法做,附近底部。出於某種原因,它只是使無數的分支左側或右側,取決於名稱將被分類的位置。我看不出我要去哪裏,所以任何幫助都會很棒。

回答

0

所以,我沒有看到你的代碼實際上最初調用插入,所以我無法驗證這一點。但是,你試圖從插入方法返回什麼?它不應該是新創建的BinarySearchPerson嗎?如果是這樣,你不應該返回新創建的元素而不是你正在使用的元素嗎?此外,您正在創建的新BinarySearchPersons沒有引用前一個。如果您需要做這樣的事情(做這個也爲右側):

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

    } 
} 
1

私有靜態BinarySearchPerson刪除static修飾符離開; 私有靜態BinarySearchPerson權利;

樹中的每個節點應該有它自己的左和右。