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