我的 C++ 程序根据用户输入创建了一个不平衡的 BST,并将其保存在磁盘上。为此,它首先通过执行预序遍历为每个节点编制索引并为每个节点分配一个唯一编号。接下来,它将 BST 输出到文件中。它通过执行预序遍历然后为每个节点打印数据值、左 child 的索引号和右 child 的索引号来完成此操作。
所以BST保存到磁盘后,内存中的BST就被销毁了。我想读入文件并重新创建 BST,这样它就和以前一样了。
最佳答案
将所有节点连同左右子索引(比如哈希表)一起读入内存。然后从根节点(即文件中的第一个节点)开始,通过索引从哈希表中找到左右 child 。以 DFS 或 BFS 方式对子节点重复相同的过程。两者都应该有效。
您可以对其进行优化,避免在构建树之前将整个数据加载到内存中。您可以读取节点并以 DFS 方式构建树。所以添加左 child 是直截了当的。添加右 child 时,您必须检查索引号。如果不匹配,则尝试将该子节点添加到比 DFS 排序中的当前节点更高的节点中。
关于c++ - 如何从文件重建 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242156/