繁体   English   中英

Python:如何保存二叉树?

[英]Python: how to save a Binary Tree?

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

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

有不同类型的具有不同规则的二叉树可以帮助简化反序列化,但基本上,只需按顺序遍历树和 output 每个节点,然后重新创建它,读入文件并重新生成结构。

为每个节点包含指示它是否是叶节点的标记可能会有所帮助(然后告诉您下一个元素是否属于当前节点的下方或上方。或者,您可能希望有一个指示 NULL 节点的标记,例如,这可能有助于具有左分支但没有右分支的节点。

例如:

   A
 B   C
D E    F

可以表示:

A B D - - E - - C - F - -

或作为:

A[B[D,E],C[-,F]] 

让我想起了我在大学时做的计算机科学作业。

一个简单的解决方案: - 扩展当前 class 以具有loadsave方法 - 为每个节点添加唯一的 id - 实现自顶向下解析并将每个节点保存到具有类似结构的 xml

<node id="mynicelycrafteduniqueid">
    <data>...</data>
    <leftChild>childuniqueId</leftChild>
    <rightChild/> <!-- no right child -->
</node>

你完成了(如果数据至少很容易序列化),第一个节点是你的树根。

别忘了施肥,你的树会重生更漂亮

您可以实现一个小型数据库(例如 sqlite3)以使结构保持不变。

例子:

Node: {nodeId(PK), [leftChildId](FK), [rightChildId](FK)}
leftChildId, rightChildId references Node;

与布鲁斯的回答类似,您将实现save / load function。

另一个想法:

二叉树如:

    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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM