Python - 展平一棵有N个孩子的树(N-ary树)

时间:2017-10-12 18:42:24

标签: python tree flatten

我想将N-ary树压缩成如下列表:

      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)

2 个答案:

答案 0 :(得分:1)

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

不一定是最容易理解的,但我想尝试解决单线。

答案 1 :(得分: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]这样的单线程解决方案,但它从未像创建嵌套列表那样起作用。如果有人知道更简洁的方式,请分享。