2017-10-12 6 views
0

を持つツリーをフラット化:Pythonの - 私はそうのようなリストにN分木を平らにしたい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]として1つのライナー解に到達するためにしばらくの間しようとしたが、それは、ネストされたリストを作成したとして、それが働いたことはありません。もし誰かがもっときれいな方法を知っていれば分かち合ってください

+0

"python flatten list"を検索します。 –

関連する問題