0

我在正确处理树时遇到问题。树很简单,只是一个节点和子列表

class Tree (object):
    __slots__ = "node","children"
    def __init__(self,node,children=[]):
        self.node = node
        self.children = children

但是,使用线性化技术,我们应该检测给定分支结束了多少(子)树。例如,如果我们像这样构造一棵树:

t = Tree(1, [Tree(2, [Tree(5), Tree(3, [Tree(4)])])])

那么t.linearize()应该输出1 2 5 NIL 3 4 NIL NIL NIL NIL. 每个NIL代表 1 个(子)树正在结束。

我当前的版本只输出以下内容:1 2 5 NIL 3 4 NIL,没有多个NILs。知道我遗漏了什么吗?

def linearize(self):
    print self.node,
    if self.children == []:
        print "NIL",
    for child in self.children:
        child.linearize()
4

1 回答 1

1

您真正想要的 IIUC:

def linearize(self):
    print self.node,
    for child in self.children:
        child.linearize()
    print "NIL",

这使:

In [5]: t.linearize()
1 2 5 NIL 3 4 NIL NIL NIL NIL

现在,"NIL"当有孩子时,您不会打印。(正如评论中所指出的,你真的想要children=None然后self.children = children if children is not None else []或其他东西。)

您可能也有兴趣对yield每个元素进行重新设计,而不仅仅是打印它们,但显然这取决于您。

于 2013-02-04T18:54:50.413 回答