【发布时间】:2021-02-24 07:15:55
【问题描述】:
我是 python 新手。
我有一个树形数据结构是这样定义的(不是我写的,是提供的):
class Tree(object):
def __init__(self, name='root', children=None):
self.name = name
self.children = []
if children is not None:
for child in children:
self.add_child(child)
def __repr__(self):
return self.name
def add_child(self, node):
assert isinstance(node, Tree)
self.children.append(node)
以下函数显示树:
def display_tree(root, indent=0):
print(' ' * indent, root)
if len(root.children) > 0:
for child in root.children:
display_tree(child, indent+4)
现在,我有一个符号列表,如下所示:
symbols = ['a', '[', 'b', '[', 'c', 'd', 'e', ']', 'f', '[', 'g', 'h', '[', 'i', ']', '1j', '[', 'k', 'l', ']', ']', 'm', ']']
我需要能够得到如下的树:
a
b
c
d
e
f
g
h
i
j
k
l
m
我发现以下代码行给了我需要的结果:
t = Tree('a',[Tree('b',[Tree('c'),
Tree('d'),
Tree('e')]),
Tree('f',[Tree('g'),
Tree('h',[Tree('i')]),
Tree('j',[Tree('k'),
Tree('l')])]),
Tree('m')])
display_tree(t)
那么如何将符号列表转换为上面't'的形式,这样当我将列表作为函数的输入时,我得到树作为输出?
我最初的想法是使用堆栈数据结构,并不断将符号压入堆栈,直到遇到']',然后通过从堆栈中弹出元素来构建一棵树。但这并没有保留顺序,而且我对python的熟练程度也不足以实现这一点。
【问题讨论】:
标签: python python-3.x list tree