在python中实现树结构(泛型 - 非二进制)的最佳方法是什么?我的直觉会有以下骨架:
class TNode(self, data):
#enter things for each individual node
class TStructure(self):
#enter code for implementing nodes that reference each other.
答案 0 :(得分:1)
查看networkx和Graph对象。
请参阅here
如果这是作业,你必须从头开始实施,我会给你一个提示,你可能想要一个节点类和一个边缘类......
编辑:
如果你有一个节点类和一个边缘类,那么你真的不需要一个结构类。一旦实现了遍历图形的东西,它只是搜索算法的一个问题。
class Node:
name=str()
class Edge:
a = Node()
b = Node()
然后将它们与__init__
函数串在一起,用于两个类中的一个,具体取决于您将如何加载数据。
答案 1 :(得分:1)
为什么不只有一个节点类,它有一个子节点列表?
编辑以添加骨架:
class TreeNode(object):
def __init__(self, data, children=[]):
self.data = data
self.children = list(children)
def add(self, child):
self.children.append(child)
...
真的没什么了不起的。每个TreeNode都包含一组子节点(叶节点只有0个子节点,这与您可以获得的树叶节点的定义的纯代码实现非常接近)。您可以添加方法来操纵子项的顺序,但是如果您需要这样做,最好只考虑公开的children
列表并直接使用列表方法。您可以添加search
之类的方法,但对于没有已知排序约束的通用树(如在二叉搜索树中,其中一个子树的内容小于另一个子树的内容),并不是很多它要做。您可以为遍历添加生成器方法(使用几种可能的遍历策略)。
如果您只希望叶节点拥有数据,那么内部节点和叶节点都有一个单独的类,其中内部节点有children
,叶节点有data
。