在python中实现树结构的最佳方法是什么

在python中实现树结构的最佳方法是什么,python,algorithm,data-structures,tree,Python,Algorithm,Data Structures,Tree,在python中实现树结构(泛型而非二进制)的最佳方法是什么?我的直觉会有以下框架: class TNode(self, data): #enter things for each individual node class TStructure(self): #enter code for implementing nodes that reference each other. 查看networkx和图形对象 看 如果这是家庭作业,你必须从头开始实现,我会给你一个提示,你可能

在python中实现树结构(泛型而非二进制)的最佳方法是什么?我的直觉会有以下框架:

class TNode(self, data):
   #enter things for each individual node

class TStructure(self):
   #enter code for implementing nodes that reference each other.

查看networkx和图形对象

如果这是家庭作业,你必须从头开始实现,我会给你一个提示,你可能想要一个节点类和一个边缘类

编辑:

如果您有一个节点类和一个边类,那么实际上并不需要一个结构类。一旦实现了它,遍历图只是一个搜索算法的问题

class Node:
    name=str()

class Edge:
    a = Node()
    b = Node()

然后根据加载数据的方式,将它们与两个类中的一个类的
\uuuuu init\uuuuuu>函数串在一起。

为什么不为节点创建一个包含子节点列表的类呢

编辑以添加骨架:

class TreeNode(object):
    def __init__(self, data, children=[]):
        self.data = data
        self.children = list(children)

    def add(self, child):
        self.children.append(child)
    ...
其实没什么大不了的。每个树节点都包含一组子节点(叶节点只有0个子节点,这与树叶节点定义的纯代码实现非常接近)。您可以添加方法来操纵子对象的顺序,但如果需要,您最好只考虑公开
子对象
列表并直接使用列表方法。您可以添加像
search
这样的方法,但是对于没有已知顺序约束的泛型树(比如在二叉搜索树中,其中一个子树的内容小于另一个子树的内容),它没有太多的工作要做。您可以为遍历添加生成器方法(使用几种可能的遍历策略)


如果只希望叶节点有数据,那么内部节点和叶节点有一个单独的类,其中内部节点有
子节点
,叶节点有
数据

如果这是作业,你应该将其标记为这样。这不是作业,但有趣的是你提到了边类。那么你是说我有3个类,一个是边,一个是节点,然后一个是结构?尽管我做了编辑,我还是会说如果这不是作业,为什么要重新创造世界。。。networkx实际上是python数据结构的一个非常糟糕的组件。@cfarm54:您创建一个节点对象来表示树的根节点,并通过将子节点对象添加到根节点的列表来填充树。当然,每个子节点对象也包含一个列表,因此可以继续展开树。列表为空的节点将是叶节点。@cfarm64:当然,您可能仍然需要一个树类,其中包含搜索、添加和从树中删除算法的实现。@robjb或者您可以将其放在节点类上,因为每个节点都是子树的根。@cfarm54已添加骨架。尼克·约翰逊的评论完全正确;有一个单独的树类是没有什么意义的,因为树没有什么比根节点更重要的了,所以让所有节点都是树更方便。我明白了,在每个列表中都会有节点,这些节点会导致其他节点列表。