Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中构建组合树?_Python_Data Structures_Tree - Fatal编程技术网

如何在Python中构建组合树?

如何在Python中构建组合树?,python,data-structures,tree,Python,Data Structures,Tree,对于Node和Tree,我有以下两个类 节点: 具有级别的树: class Tree: def __init__(self): self._levels = {} def add_levels(self, index, nodes): self._levels[index] = nodes def __getitem__(self, index): # further stuff return self.

对于Node和Tree,我有以下两个类

节点:

具有级别的树:

class Tree:
    def __init__(self):
        self._levels = {}

    def add_levels(self, index, nodes):
        self._levels[index] = nodes

    def __getitem__(self, index):
        # further stuff
        return self._levels[index]

    def __len__(self):
        return len(self._levels)
我想建立一个组合树,如下所示。每个节点的标识符为n(例如,已知12、13、23)。如何递归地构建树,使树的每个级别都有一个节点列表


使用类方法,我能够构建一棵树:

root = Node(0)
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n12 = Node(12)
n13 = Node(13)
n23 = Node(23)
n123 = Node(123)

n12.add_children(n123)
n1.add_children([n12, n13])
n2.add_children(n23)
root.add_children([n1, n2, n3])

t = Tree()

t.add_levels(0, root)
t.add_levels(1, [n1, n2, n3])
t.add_levels(2, [n12, n13, n23])
t.add_levels(3, [n123])
但不确定如何访问节点数据,而不是获取其实例:

for l in range(len(t)):
    print t[l]
输出:

<__main__.Node instance at 0x108426098>
[<__main__.Node instance at 0x108426128>, <__main__.Node instance at 0x108426170>, <__main__.Node instance at 0x1084261b8>]
[<__main__.Node instance at 0x108426200>, <__main__.Node instance at 0x108426248>, <__main__.Node instance at 0x108426290>]
[<__main__.Node instance at 0x1084262d8>]

[, ]
[, ]
[]
但至少这回答了你关于如何建造树的问题


希望这有帮助。

这需要“递归”完成吗?不一定是递归。这只是我的建议。酷,我能够“构建”树,如下面的答案所示。还有什么需要做的吗?给出的答案很具体。我有一个n个元素的列表,不完全是3个。然后我使用itertools生成组合。一旦我有了列表的可能组合,我将构建一棵树。我的问题是,当我试图从20个元素的组合中构建一棵树时,我的性能很差。我想知道,也许我的实现不是pythonic的,或者不够好,无法构建这样的树。有什么建议吗?您的实现可能会得到改进,但仅针对20个元素,我看不出它将如何产生糟糕的性能。请随时更新您的问题,了解导致性能不佳的场景,我或其他人可以提出改进建议。
<__main__.Node instance at 0x108426098>
[<__main__.Node instance at 0x108426128>, <__main__.Node instance at 0x108426170>, <__main__.Node instance at 0x1084261b8>]
[<__main__.Node instance at 0x108426200>, <__main__.Node instance at 0x108426248>, <__main__.Node instance at 0x108426290>]
[<__main__.Node instance at 0x1084262d8>]