Python:如何保存二叉树?

时间:2011-06-01 06:56:09

标签: python persistence binary-tree

我想知道如何保存我之前创建的二叉树。 有谁知道怎么做? 非常感谢你。

PD:这里有一个关于如何实现二叉树的链接,我正在使用这个pice od代码: http://code.activestate.com/recipes/286239-binary-ordered-tree/

4 个答案:

答案 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)

一个简单的解决方案: - 将当前类扩展为loadsave方法 - 为每个节点添加唯一ID - 实现自上而下的解析并将每个节点保存为具有类似

结构的xml
<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>

这取决于节点的复杂程度。如果它们不是字符串,数字或布尔值,那么腌制整棵树可能更容易,更快。