2017-03-28 47 views
0

我有以下兩個類的節點和樹如何在Python中構建組合樹?

節點:

class Node: 

    def __init__(self, identifier): 
     self._children = [] 
     self._identifier = identifier 

    def add_children(self, node): 
     self._children.append(node) 

    def get_children(self): 
     return self._children 

樹平:

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是已知的)。我如何遞歸地構建樹,以便樹的每個級別都有一個節點列表?

Tree List of Nodes

+0

這是否需要「遞歸地」完成? – davedwards

+0

不一定遞歸。這只是我的建議。 – Alberto

+0

酷,好吧,我能夠「建立」樹,如下面的答案。還有更多需要完成的事情嗎? – davedwards

回答

-1

使用類的方法,我能夠建立一個樹:

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>] 

但至少這回答你的問題如何建立樹。

希望這會有所幫助。