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

ただし、+ と - の実行優先度は同じであるため、結合性が考慮されます。演算子は、左から右へ同じ結合性を持ちます。つまり、左側には、演算子に対するオペランドが 1 つだけある必要があります。- 演算子のみが左側に 1 つのオペランドを持っているため、最初に実行され、次に + 式が次のように変更されます。

( (BC) + D )

A*Z*P/Q ここで、z=( (BC) + D )

ステップ 2: * と / は評価の優先順位が同じであるため、* と / のタイ結合性を破ることが考慮されます。両方の演算子は左から右に同じ結合性を持ちます。つまり、左側は明確でなければなりません。これは、演算子 (* OR /) の左側にオペランドが 1 つしかないことを意味します。

したがって、最初の * のみが 1 つのオペランド、つまり A を持つため、次に A*Z が実行されます。

(A*Z)*P/Q

に名前を変更しましょう

AZ*P/Q

ステップ 3: 残りのオペランドの優先度が同じであるため、結合規則に従います * 左の AZ にオペランドが 1 つしかないため、最初に実行されます。

AZP/Q

ステップ 4:最後に / 演算子が実行されます

AZPQ

于 2014-08-30T19:31:22.037 に答える
0

式を書いているときに間違いを犯したと思います..私によれば、それはA*B-(C+D)*P/Qであり、この場合、バイナリツリーは次のようになります..

                -
        *                    *
      A   B             +          /
                      C   D      P   Q
于 2012-12-13T12:34:57.963 に答える
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 に答える