2

我必须为这个表达式绘制二叉树A*(B-C+D)*P/Q

这是正确的吗?

                        *

             *                    /

          A     +              P     Q

              -   D 

            B   C
4

4 回答 4

3

你的树对应于这个表达式:

   (A*(B-C+D))*(P/Q)

虽然在技术上是正确的,但它应该是这样的(如果你假设乘法和除法具有相同的优先级):

   ((A*(B-C+D))*P)/Q
于 2012-12-13T12:34:16.313 回答
1

你的答案是正确的。以下是获取这棵树的步骤

A*(B-C+D)*P/Q

第 1 步:由于括号具有最高优先级,因此首先对其进行评估。

B-C+D

但是 + 和 - 具有相同的执行优先级,因此考虑了关联性。运算符从左到右具有相同的关联性,即左侧必须只有一个运算符的操作数。只有 - 运算符的左侧有一个操作数,所以它先被执行,然后 + 所以表达式变为

((BC)+ D)

A*Z*P/Q 其中 z=( (BC) + D )

步骤2: *和/具有相同的评估优先级,因此考虑打破*和/的平局关联性。两个运算符从左到右具有相同的关联性,即左侧必须是明确的,这意味着运算符(* OR /)的左侧必须只有一个操作数。

所以只有第一个 * 有一个操作数,即 A 因此接下来执行 A*Z

(A*Z)*P/Q

让我们将其重命名为

AZ*P/Q

第 3 步: 现在遵循关联性规则,因为剩余操作数具有相同的优先级 * 首先执行,因为它的左侧 AZ 只有一个操作数,所以,

AZP/Q

第 4 步: finally / 运算符将被执行

AZPQ

于 2014-08-30T19:31:22.037 回答
0

为了明确起见,表达式树可以在每个二元运算周围有括号。所以这将导致 (B- C) +D 和 B - (C + D) 的不同树,尽管由于加法的关联规则,结果将是相同的。

虽然对于人类读者来说不太清晰,但一致的包围的优点是可以清楚地区分 (((A*(B-(C+D))) P)/Q) 和 ((A (B-(C+D)) )*(P/Q))。

于 2013-11-24T17:22:06.273 回答
0

我认为您在编写表达式时犯了一个错误..根据我的说法,这将是 A*B-(C+D)*P/Q 而对于这个二叉树将是这样的..

                -
        *                    *
      A   B             +          /
                      C   D      P   Q
于 2012-12-13T12:34:57.963 回答