|
|
1
9
你可以递归地存储它:
设计自己的文本较少的输出格式。我确信我不需要描述读取结果输出的方法。 这是深度优先遍历。广度优先也是有效的。 |
|
|
2
9
我会进行一次级别顺序遍历。也就是说,你基本上是在做一个 Breadth-first search 算法。 您有:
层次顺序遍历序列:F、B、G、A、D、I、C、E、H 您将在磁盘上存储的内容:F、B、G、A、D、NullNode、I、NullNode,NullNode、C、E、H、NullNode 从磁盘加载回它甚至更容易。只需从左到右读取存储到磁盘的节点。这将为您提供每个级别的左右节点。也就是说,这棵树将从左到右从上到下填充。 第一步阅读:
第二步阅读:
第三步:阅读:
第四步:阅读:
等等。.. 注意:一旦有了NULL节点表示,就不再需要将其子节点列到磁盘。重新加载时,您将知道跳到下一个节点。因此,对于非常深的树木,这种解决方案仍然是有效的。 |
|
|
3
1
实现这一点的一个简单方法是遍历树,输出每个元素。然后要重新加载树,只需迭代列表,将每个元素重新插入树中。如果你的树不能自我平衡,你可能想重新排序列表,使最终的树达到合理的平衡。 |
|
|
4
1
不确定它是否优雅,但它简单易懂: 为每个节点分配一个唯一的ID,无论是茎还是叶。一个简单的计数整数就可以了。 保存到磁盘时,遍历树,存储每个节点ID、“是”链接ID、“否”链接ID以及问题或答案的文本。对于空链接,使用零作为空值。您可以添加一个标志来指示问题或答案,或者更简单地说,检查两个链接是否都为空。你应该得到这样的东西:
请注意,如果您使用顺序整数方法,保存节点的ID可能是多余的,如下所示。你可以按身份把它们按顺序排列。 要从磁盘还原,请读取一行,然后将其添加到树中。您可能需要一个表或数组来保存引用的节点,例如,在处理节点1时,您需要跟踪2和3,直到您可以填写这些值。 |
|
|
5
0
最简单的方法就是使用一种基本格式来表示任何图形。
即:
没有 很 这里存在冗余,格式大多是人类可读的,唯一的数据重复是,它所拥有的每个直接子项都必须有一个父项的副本。 你唯一需要注意的是,你不会意外地产生循环;) 除非这是你想要的。
这就是为什么我传统上只在内存中使用图结构来处理指针无处不在的事情。
那么,“子/父”连接只是元数据。 |
|
|
6
0
在java中,如果要使类可序列化,只需将类对象写入磁盘,然后使用输入/输出流将其读回即可。 |
|
|
7
0
我会这样存放这棵树:
其中子节点只是上述的递归实例。[]中的位是可选的,四个标识符只是常量/枚举值。 |
|
|
8
0
以下是使用PreOrder DFS的C++代码:
在……里面
DFS更容易理解。
但是我们可以使用队列使用级别扫描BFS
在……里面
|