如何在Python中构建组合树?
对于Node和Tree,我有以下两个类 节点: 具有级别的树:如何在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.
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>]