Java 从文件读回BST

Java 从文件读回BST,java,serialization,Java,Serialization,这是一个令人困惑的问题,所以我道歉,因为我不太清楚该如何表达。基本上我所做的是对二进制搜索树进行排序。在整个程序中,用户向树中添加一条记录,这是一个包含的节点(int studentNumber、String firstName、String lastName、String major、double gpa)。在程序结束时,节点被转换到一个带有自定义节点的LinkedList类I,然后该列表被序列化为一个文件 现在,在启动时,我想基本上将该文件读回另一个列表,显示该列表,然后将其添加回BST,以

这是一个令人困惑的问题,所以我道歉,因为我不太清楚该如何表达。基本上我所做的是对二进制搜索树进行排序。在整个程序中,用户向树中添加一条记录,这是一个包含
的节点(int studentNumber、String firstName、String lastName、String major、double gpa)
。在程序结束时,节点被转换到一个带有自定义
节点的LinkedList
类I,然后该列表被序列化为一个文件

现在,在启动时,我想基本上将该文件读回另一个列表,显示该列表,然后将其添加回BST,以便可以以各种方式对其进行排序。我的问题是读取文件中的每一行(节点),并将字段
(int studentNumber、String firstName、String lastName、String major、double gpa)
从每个“节点”拉回到树中。到目前为止,我在阅读部分看到了以下内容:

public void loadRecord(LinkedList list) {

    File file = new File("records.txt"); 

    try
    {

        LinkedList<Node> list2;
        ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));
        list2 = (LinkedList<Node>)input.readObject();
        if (list2.size() > 0){
            list.addAll(list2);
        }//end if
        else {
            System.out.println("No elements");
        }

    }
    //Catch Exceptions
   //display list
}//end loadRecord
公共无效加载记录(LinkedList列表){
File File=新文件(“records.txt”);
尝试
{
链接列表2;
ObjectInputStream输入=新ObjectInputStream(新文件输入流(文件));
list2=(LinkedList)input.readObject();
如果(list2.size()>0){
list.addAll(列表2);
}//如果结束
否则{
System.out.println(“无元素”);
}
}
//捕获异常
//显示列表
}//结束加载记录
再次。。如果这毫无意义,我道歉。很可能我的方向完全错了,所以我很感激任何反馈。请让我知道你的想法

首先,a 链表和二叉搜索树是两种不同的数据结构。你不能把一个和另一个结合起来。 假设您有一个要存储的数字列表。数据以相同的顺序添加到两个结构中。链接列表将类似于:

|5|-->|3|-->|7|-->|2|-->|6|-->|4|-->|8|-->|1|
  • “|x |”表示包含存储在其中的数据的x的节点
  • 箭头表示节点对其下一个节点的引用
  • 数据的顺序与输入方式相同
二进制搜索树:

                         5 
                        / \
                       /   \
                      3     7
                     / \   / \
                    2   4 6   8
                   /            
                  1 
  • 对于每个父节点,都有一个左节点和右节点的引用。左侧子节点中的数据小于父节点中的数据,右侧子节点中的数据大于父节点中的数据
因此,无论输入的数据是什么,都必须是“可比”的,即一个值可以大于或小于另一个值。因此,如果您存储的数据是学生,那么一个学生必须比另一个学生具有更大的价值(gpa更高,学生人数更大,姓名的最后字母顺序,等等)

与链表不同,标准API不提供二进制搜索树类。因此,您必须实现自己的。你需要熟悉递归来实现BST。确保你决定如何比较学生并相应地实现树。以下是一个有帮助的链接:

接下来,您需要从记录文件中提取学生信息并将其存储在树中。如果您在
record.txt
文件中说明学生信息的排序方式会有所帮助。现在,我假设学生信息的排序方式是将每个学生的数据写在一行中。我将在CustomNode(应该称为student)类中实现一个方法,该方法接收一行,解析它,并将数据存储在student字段中。 然后我将创建一个while循环,创建一个新的student,将当前行添加到student对象的适当方法中,并将student对象添加到树中,只要输入流中有下一行

正如我所说,我需要记录文件中的更多信息来进一步解释。如果你还需要澄清,请告诉我