java - 二叉搜索树排序时出现问题

标签 java sorting binary-search-tree

我在使二叉搜索树工作时遇到了麻烦。这个想法是,将一个人放入其中,然后根据他们的名字进行排序。

我为 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 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;


}



}

我遇到的问题与底部附近称为“插入”的排序方法有关。由于某种原因,它只会向左或向右产生无数个分支,具体取决于名称的排序位置。我看不出我哪里出了问题,所以任何帮助都会很棒。

最佳答案

从中删除静态修饰符

私有(private)静态 BinarySearchPerson 左; 私有(private)静态 BinarySearchPerson 权利;

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

关于java - 二叉搜索树排序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325331/

相关文章:

java - 如何根据正态(高斯)分布对网格(矩阵)的单元格进行采样?

javascript - 使用 javascript 对电子商务页面进行排序(a/b 测试)

java - TreeMap 中的二分查找

java - 二叉搜索树递归添加

c++ - 使用递归的有序和预序遍历-二进制搜索树C++

java - 在 GlassFish Server Open Source Edition 3.1.2 中管理共享库

java - 带有 TextView As 链接的 Android 对话框

java - 使无副作用的方法静态化

c# - 按可以为 null 的父对象对 IList<Person> 进行排序

java - Android Firebase 数据库中的排序键