我想知道如何保存我之前创建的二叉树。 有谁知道怎么做? 非常感谢你。
PD:这里有一个关于如何实现二叉树的链接,我正在使用这个pice od代码: http://code.activestate.com/recipes/286239-binary-ordered-tree/
答案 0 :(得分:5)
有不同类型的二叉树具有不同的规则可以帮助简化反序列化,但基本上,只需遍历树并按顺序输出每个节点,然后重新创建它,读入文件并重新生成结构。 / p>
为每个节点添加标记可能会有所帮助,这些标记指示它是否是叶节点(然后告诉您下一个元素是否属于当前节点的下方或上方。或者,您可能希望有一个标记指示例如,NULL节点可能有助于具有左侧但不是右侧分支的节点。
EG:
A
B C
D E F
可以代表:
A B D - - E - - C - F - -
或者作为:
A[B[D,E],C[-,F]]
让我想起了我在大学时所做的计算机科学作业。
答案 1 :(得分:4)
一个简单的解决方案:
- 将当前类扩展为load
和save
方法
- 为每个节点添加唯一ID
- 实现自上而下的解析并将每个节点保存为具有类似
<node id="mynicelycrafteduniqueid">
<data>...</data>
<leftChild>childuniqueId</leftChild>
<rightChild/> <!-- no right child -->
</node>
你已经完成了(如果数据至少很容易被序列化),第一个节点就是你的树根。
不要忘记肥料,你的树将重生更美丽
答案 2 :(得分:2)
您可以实现一个小型数据库(例如sqlite3)来保持结构。
示例:
Node: {nodeId(PK), [leftChildId](FK), [rightChildId](FK)}
leftChildId, rightChildId references Node;
与Bruce的回答类似,您将实施save
/ load
功能。
答案 3 :(得分:1)
另一个想法:
二进制树,如:
A
/ \
B C
/ \ \
D E F
可以表示为:
A B C
B D E
C F
或者,更抽象地说:
<parent-id><separator><child-1-id>(<separator><child-2-id>)?<newline>
这取决于节点的复杂程度。如果它们不是字符串,数字或布尔值,那么腌制整棵树可能更容易,更快。