我正在尝试从算术表达式中删除多余的括号。例如,如果我有一个表达式(5+((2*3)))
,我希望删除(2*3)
之间多余的括号。我希望得到的输出是(5+(2*3))
。
我通过在表达式树上执行中序遍历得到这个算术表达式。执行遍历后得到的最终字符串是((5)+(((2)*(3))))
。我使用re.sub('\((\d+)\)', r'\1', <traversal output string>)
删除了数字之间的括号,如(5)
到5
。但我仍然不清楚应该如何删除子表达式之间的括号(本例中为((2*3))
)。
下面是我的inorder遍历函数
def inorder(tree):
# return string of inorder traversal of tree with parenthesis
s = ''
if tree != None:
s += '('
s += ExpTree.inorder(tree.getLeftChild())
s += str(tree.getRootVal())
s += ExpTree.inorder(tree.getRightChild())
s += ')'
return re.sub('\((\d+)\)', r'\1', s)
任何关于我应该如何解决这个问题的指导将不胜感激!
1条答案
按热度按时间pqwbnv8z1#
除了在父/根表达式前后添加括号外,还有一种选择是在递归的左右子表达式前后添加括号。如果这些子表达式是叶表达式,意味着它们没有子表达式,则不添加括号。
实际上,这可能类似于:
这意味着一棵只有一个节点5的树将变成
"5"
,而下面的树将变成
"5+(2*3)"
。