从字符串输入创建二叉树

时间:2016-03-26 02:05:57

标签: python python-3.x binary-tree

我尝试创建一个递归(或循环)函数,该函数将字符串作为输入,形成"(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。任何帮助/提示都会受到赞赏,因为我在这里真的很丢失。

1 个答案:

答案 0 :(得分:1)

您的功能存在许多问题:

  • list.append()返回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]]