2014-12-05 73 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权利;

树中的每个节点应该有它自己的左和右。