我必须为此表达式A*(B-C+D)*P/Q
这个是正确的吗?
*
* /
A + P Q
- D
B C
答案 0 :(得分:3)
您的树对应于此表达式:
(A*(B-C+D))*(P/Q)
虽然技术上正确,但它应该是这样的(如果你假设乘法和除法具有相同的优先权):
((A*(B-C+D))*P)/Q
答案 1 :(得分:1)
你的答案是对的。以下是获取此树的步骤
<强> A *(B-C + d)* P / Q 强>
第1步:由于括号具有最高优先级,因此首先进行评估。
B-C + d
但是+和 - 具有相同的执行优先级,因此考虑了关联性。运算符从左到右具有相同的关联性,即左侧必须只有一个操作符的操作数。 只有 - 运算符左边有一个操作数,所以首先是操作数,然后是+ 所以表达式改为
((B-C)+ D)
A * Z * P / Q其中z =((B-C)+ D)
第2步: *和/具有相同的评估优先级,因此要打破*和/的关联关系。运算符从左到右都具有相同的关联性,即左侧必须是明确的,这意味着在运算符的左侧(* OR /)必须只有一个操作数。
所以只有第一个*有一个操作数,即A. 因此,下一步执行A * Z
(A * Z)* P / Q
让我们将其重命名为
AZ * P / Q
第3步: 现在遵循关联性规则,因为剩余操作数具有相同的优先级 *首先执行,因为它的左侧只有一个操作数 所以,
AZP / Q
第4步:最后/运营商将执行
AZPQ
答案 2 :(得分:0)
我认为你在写表达时犯了一个错误..据我说它是A * B-(C + D)* P / Q 为此,二叉树将是这样的..
-
* *
A B + /
C D P Q
答案 3 :(得分:0)
为了明确,表达式树可以在每个二进制操作周围有括号。因此,对于(B-C)+ D和B - (C + D),将导致不同的树,但是由于相关的加法规则,结果将是相同的。
虽然人类读者的清晰度较低,但一致包围的优势在于明确区分(((A *(B-(C + D))) P)/ Q)((A (B-(C + d)))*(P / Q))。