从字符串输入创建二叉树
Creating a Binary Tree from string input
我正在尝试创建一个递归(或循环)函数,它将字符串作为输入,形成“(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
。任何 help/hints 都将不胜感激,因为我在这里真的很迷路。
你的函数有很多问题:
- list.append() returns None
- 你为每个条件返回(通常 None 因为上面)
- 你对一个元素进行了不必要的递归
- 你的递归函数不会推进你的外部函数,因为你传入了字符串的副本,将字符串变成可迭代的
快速修复:
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]]
我正在尝试创建一个递归(或循环)函数,它将字符串作为输入,形成“(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
。任何 help/hints 都将不胜感激,因为我在这里真的很迷路。
你的函数有很多问题:
- list.append() returns None
- 你为每个条件返回(通常 None 因为上面)
- 你对一个元素进行了不必要的递归
- 你的递归函数不会推进你的外部函数,因为你传入了字符串的副本,将字符串变成可迭代的
快速修复:
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]]