c++ - 如何从文件重建 BST

标签 c++ file indexing linked-list binary-tree

我的 C++ 程序根据用户输入创建了一个不平衡的 BST,并将其保存在磁盘上。为此,它首先通过执行预序遍历为每个节点编制索引并为每个节点分配一个唯一编号。接下来,它将 BST 输出到文件中。它通过执行预序遍历然后为每个节点打印数据值、左 child 的索引号和右 child 的索引号来完成此操作。

所以BST保存到磁盘后,内存中的BST就被销毁了。我想读入文件并重新创建 BST,这样它就和以前一样了。

最佳答案

将所有节点连同左右子索引(比如哈希表)一起读入内存。然后从根节点(即文件中的第一个节点)开始,通过索引从哈希表中找到左右 child 。以 DFS 或 BFS 方式对子节点重复相同的过程。两者都应该有效。

您可以对其进行优化,避免在构建树之前将整个数据加载到内存中。您可以读取节点并以 DFS 方式构建树。所以添加左 child 是直截了当的。添加右 child 时,您必须检查索引号。如果不匹配,则尝试将该子节点添加到比 DFS 排序中的当前节点更高的节点中。

关于c++ - 如何从文件重建 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242156/

相关文章:

c++ - openssl RAND_add() 文档引用 RFC1750。 RFC1750 对此事保持沉默

C++ 如何在内存中指定一个位置来获取数据?

c++ - OpenCL 管道无法使用 cl_mem_object_allocation_failure 分配缓冲区

java - 在java中删除文件

python - 在字符串时获取列中的索引最小值 - Pandas Dataframe

c++ - C 和 C++ 库错误

将 Java zip 文件和目录压缩到一个存档中

winforms - 如何确定文件是否已打开以在 Windows 上追加?

python - 在 Python 中索引浮点值

SQL 过滤索引 : should I always put a filter on an index for optional columns?