令和3年度 I-2-5

科目: 基礎科目 / 分野: 情報・論理 / 年度: 令和3年度

I-2-5 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

中置記法「(A+B÷C)×(D-F)」を構文木で表し、深さ優先順(左部分木・右部分木・節)で走査して逆ポーランド表記法(後置記法)に変換する問題。

解説

この問題で問われていること

中置記法「(A+B÷C)×(D-F)」を表す構文木を、深さ優先順(左部分木、右部分木、節の順)で走査し、逆ポーランド表記法(後置記法)に変換する問題。

解き方

① 逆ポーランド=左部分木→右部分木→演算子の順。÷は+より先に計算するので B÷C がひとまとまり
② 左: A (B C ÷) + → A B C ÷ +、右: D F −、最後に×
③ A B C ÷ + D F − ×(①)

正解が正しい理由

構文木は根が×、左の子が+(その子はAと、B÷Cを表すサブツリー)、右の子が-(その子はDとF)という構造になる。左部分木・右部分木・節の順に走査すると、まず左部分木(+側)を処理し、その中でもさらに左(A)→右(B÷Cのサブツリー:B→C→÷)→節(+)の順でAとB, C, ÷, +が出力され「A B C ÷ +」となる。次に右部分木(-側)をD→F→-の順で処理し「D F -」となる。最後に根の×を出力する。全体をつなげると「A B C ÷ + D F - ×」となり、①が正しい。

各選択肢について

覚えるべきポイント

構文木を深さ優先順(左部分木→右部分木→節)で走査すると、その式の逆ポーランド表記法(後置記法)が得られる。この問題のように演算子の優先順位(÷が先に計算される部分木になっている)を反映した構文木の形を正しく捉えることが、変換の正確さの鍵となる。

キーワード: 逆ポーランド表記法、構文木、深さ優先探索、情報・論理