gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:10:11 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com