我尝试创建一个递归(或循环)函数,该函数将字符串作为输入,形成"(2(1)(3))" (我并不担心对它进行排序)并将其解释为二进制树的列表,例如[2 [1 [] []] [3 [] []]]。这是我到目前为止所做的工作,但它不起作用。这是我到目前为止所得到的:
def subtrees(string):
tree = []
for x in string:
if x == "(":
return tree.append(subtrees(string[1:]))
elif x == ")":
return tree
else:
tree.append(int(x))
return tree.append(subtrees(string[1:]))
经过大量测试后,我发现了两个大错误:一个是return
找到第一个闭括号后完成整个运行函数(而不仅仅是一个递归调用结束一个节点) ),由于某种原因,当我尝试打印输出时,它会打印None
。任何帮助/提示都会受到赞赏,因为我在这里真的很丢失。
答案 0 :(得分:1)
您的功能存在许多问题:
快速修复:
def subtrees(string):
s = iter(string)
tree = []
for x in s:
if x == "(":
tree.append(subtrees(s))
elif x == ")":
return tree
else:
tree.append(int(x))
return tree[0]
>>> subtrees('(2(1)(3))')
[2, [1], [3]]