这里我试图将二叉树组合到表达式中。例如
b1 = BinaryTree(3.0)
打印(圆括号(B1))
3.0
b2 = BinaryTree(4.0)
b3 = BinaryTree(7.0)
b4 = BinaryTree(“*”,b1,b2)
b5 = BinaryTree(“+”,b4,b3)
打印(圆括号(B5))`
((3.0 * 4.0)+ 7.0)
我为LIMIT
编写的代码位于底部,上面是二进制树基本代码。但是我的代码,而不是返回“somenumber”,它返回
( “somenumber”)。当我删除“(”时,括号完全消失。有人可以帮忙填写代码吗?
parenthesize()
答案 0 :(得分:1)
您似乎希望代码只在附加了操作的节点(树)周围放置括号。在你的评论中你说
b1 = BinaryTree(3.0)
print(parenthesize(b1))
# 3.0
但这不是运行代码时发生的事情。相反,输出为(3.0)
,当您的节点是较大表达式的一部分时,这会引入冗余括号。
要解决此问题,我在您的函数中添加了elif
子句,如下所示。
def parenthesize(b):
if b is None:
return ''
elif b.left is None and b.right is None:
return str(b.data)
else:
return "("+ parenthesize(b.left)+str(b.data) + parenthesize(b.right)+")
这会产生以下输出:
b1 = BinaryTree(3.0)
b2 = BinaryTree(4.0)
b3 = BinaryTree(7.0)
b4 = BinaryTree("*", b1, b2)
b5 = BinaryTree("+", b4, b3)
print(parenthesize(b5))
# ((3.0*4.0)+7.0)
我认为你想要的是什么。您可能希望更改elif子句以检查只有一侧是空的而不是两者,但我不知道您将如何使用您的代码。例如,您是否希望允许使用3++
这样的一元表达式?如果是这样,你想把它括在()?