如何为二叉树写括号?

时间:2016-03-16 01:10:00

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

这里我试图将二叉树组合到表达式中。例如

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()

1 个答案:

答案 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++这样的一元表达式?如果是这样,你想把它括在()?