2017-10-12 36 views
0

樹我想扁平化的N叉樹成一個列表,像這樣:Python的 - 壓扁它有N個兒童(N叉樹)

 P 
______|______ 
|  |  | 
C1 C2 C3   =>  [P,C1,C4,C2,C3,C5,C6] 
|   ___|____ 
C4  |  | 
     C5  C6 

這是節點類:

class Node(object): 
    def __init__(self, data): 
     self.data = data 
     self.children = [] 
    def add_child(self, obj): 
     self.children.append(obj) 
+0

是不是隻是深度優先遍歷? – tehforsch

回答

1
class Node(object): 
    ... 
    def flatten(self): 
     return [self.data] + sum(
      (c.flatten() for c in self.children), 
      [], 
     ) 

不一定是最容易理解的,但我想嘗試解決單行問題。

0

這就是我最終做的,它的工作原理。

class Node(object): 
    def __init__(self, data): 
     self.data = data 
     self.children = [] 
    def add_child(self, obj): 
     self.children.append(obj) 
    def flatten(self): 
     out = [self] 
     for child in self.children: 
      out += child.flatten() 
     return out 

我嘗試了一段時間,以達到一個襯墊解決方案,如return [self] + [child.flatten() for child in self.children],但它從來沒有工作,因爲它創建嵌套列表。如果有人知道一個整潔的方式,請分享。

+0

搜索「python flatten list」。 –