为前缀表达式创建表达式树

时间:2017-11-05 17:53:15

标签: tree binary-tree binary-search-tree

我想在前缀表示法中为给定的表达式字符串创建表达式树(例如,调用将是create_expression_tree(" + * 2 6/3")。示例输出:

Sample output

这是我迄今为止所做的工作:

def create_expression_tree(prefix_exp_str, start_pos):
print(start_pos)
start_pos += 1
op = ["+", "-", "*", "/"]
element = prefix_exp_str[start_pos]
if element == " ":
    element = prefix_exp_str[start_pos + 1]
    start_pos += 1
if element not in op:
    return (LinkedBinaryTree.Node(int(element)), start_pos)
else:
    left = create_expression_tree(prefix_exp_str, start_pos)
    right = create_expression_tree(prefix_exp_str, left[1])
    return LinkedBinaryTree(LinkedBinaryTree.Node(element, left[0], right[0]))

a = create_expression_tree("* 2 + - 15 6 4", -1)

此方法不起作用,因为节点放置不正确。我想避免使用堆栈,因为我想要一个纯粹的递归实现。

仅供参考:这不是重复。我已经回顾了其他人的答案,我尝试过实施但却导致了相同的错误。

1 个答案:

答案 0 :(得分:0)

您正在将prefix_exp_str[1:]传递给两个递归调用。相反,第二个递归调用需要在第一次递归调用完成后接收输入字符串剩余的内容。