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

时间:2011-10-11 01:19:24

标签: 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.

2 个答案:

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