我必须做一个程序来解析一个用括号和数字表示的树。因此,每个圆括号表示树中的节点,程序应该打印出每个父节点的所有子节点。python代码如下:
class context(object):
def __init__(self, label=None, parent=None, children=[]):
self.label = label
self.parent = parent
self.children = []
self.list = []
def make_tree(self, tree):
stack = []
index = 0
while index < len(tree):
if tree[index] is '(':
if self.label is None:
self.label = tree[index+1]
index = index+1
else:
if len(stack) == 0:
stack.append(context(tree[index+1], self.label))
index = index+1
else:
stack.append(context(tree[index+1], stack[len(stack)-1].label))
index = index+1
elif tree[index] is ')':
if len(stack) == 1:
self.children.append(stack.pop())
return
else:
stack[len(stack)-2].children.append(stack.pop())
index = index+1
def traverse(self, size, obj):
if self.label is None or size == 0:
return []
temp_list = []
temp = []
dic = {}
tt = [children.label for children in obj.children]
dic[obj.label] = tt
temp.append(dic)
for child in obj.children:
temp_list = child.traverse(len(child.children), child)
print temp
return temp + temp_list
line = '( Root ( 1 ( 2 ) ( 3 ( 4 ) ( 5 ) ) ( 6 ( 7 ) ( 8 ( 9 ) ) ) ) ) '.split()
test = context()
test.make_tree(line)
final = test.traverse(len(test.children), test)
结果一定是这样。
如果我在make_tree函数中打印出列表,我会得到正确的结果。。。但最终的结果并不正确。在本例中,我缺少{3':['4','5']}
有什么意见吗??你知道吗
如果将子结果的赋值覆盖到临时列表,则可能需要执行以下操作:
我刚看了你的一些代码。它没有太多的时间,所以我不可能真正调试它的方式更多,但你也可以实现有tmpList的方式属于和基本上保持更新在每一点。Alko的解决方案同样有效,但这可能更清楚一些。你知道吗
你称之为:
相关问题 更多 >
编程相关推荐