令和6年度 春期 ITストラテジスト試験 システムアーキテクト試験 ネットワークスペシャリスト試験 ITサービスマネージャ試験 情報処理安全確保支援士試験 午前I 問題【共通】 問3
各ノードがもつデータを出力する再帰処理 f(ノード n)を定義した。この処理を,図の2分木の根(最上位のノード)から始めたときの出力はどれか。
〔f(ノード n)の定義〕
- ノード n の右に子ノード r があれば,f(ノード r)を実行
- ノード n の左に子ノード l があれば,f(ノード l)を実行
- 再帰処理 f(ノード r),f(ノード l)を未実行の子ノード,又は子ノードがなければ,ノード自身がもつデータを出力
- 終了

図の説明テキスト
2分木の構造図。
根ノードは「+」
「+」の左の子ノードは「A」、右の子ノードは「÷」
「÷」の左の子ノードは「×」、右の子ノードは「-」
「×」の左の子ノードは「B」、右の子ノードは「C」
「-」の左の子ノードは「D」、右の子ノードは「E」
解答・解説
正解: エ. ED-CB×÷A+
二分木の再帰的な探索とは
二分木の各ノードを巡回(探索)する方法には、親ノードと子ノードをどの順番で処理するかによっていくつかの種類があります。本問のように再帰的な関数を用いて、子ノードの処理を先に行い、最後に自分自身のデータを出力する方式を「帰りがけ順(後行順)」と呼びます。本問では特に右の子ノードから優先して処理を進める定義になっています。
正解の根拠
問題文で定義された再帰処理 f(ノード n) は、以下の順序で実行されます。
- 右の子ノードがあれば、そのノードに対して処理を実行する。
- 左の子ノードがあれば、そのノードに対して処理を実行する。
- 自分自身のノードのデータを出力する。
この定義に従って、根ノード「+」から順番に処理を追うと次のようになります。
ノード「+」
右の子「÷」へ進みます(左の子「A」と自身「+」の出力は保留)。ノード「÷」
右の子「-」へ進みます(左の子「×」と自身「÷」の出力は保留)。ノード「-」
右の子「E」へ進みます(左の子「D」と自身「-」の出力は保留)。ノード「E」
子ノードがないため、手順3により自身のデータ 「E」 を出力します。ノード「-」に戻り、左の子「D」へ進みます。
ノード「D」
子ノードがないため、自身のデータ 「D」 を出力します。ノード「-」の子の処理が終わったため、自身のデータ 「-」 を出力します。
ノード「÷」に戻り、左の子「×」へ進みます。
ノード「×」
右の子「C」へ進みます(左の子「B」と自身「×」の出力は保留)。ノード「C」
子ノードがないため、自身のデータ 「C」 を出力します。ノード「×」に戻り、左の子「B」へ進みます。
ノード「B」
子ノードがないため、自身のデータ 「B」 を出力します。ノード「×」の子の処理が終わったため、自身のデータ 「×」 を出力します。
ノード「÷」の子の処理が終わったため、自身のデータ 「÷」 を出力します。
ノード「+」に戻り、左の子「A」へ進みます。
ノード「A」
子ノードがないため、自身のデータ 「A」 を出力します。最後に、ノード「+」自身のデータ 「+」 を出力して終了します。
これらの出力を順番に並べると「ED-CB×÷A+」となります。したがって、正解はエです。
各選択肢の解説
ア: +÷-ED×CBAは、自分自身の出力、右の子、左の子の順で処理した場合の文字列であり、条件の定義に照らして誤りです。
イ: ABC×DE-÷+は、左の子、右の子、自分自身の出力の順で処理した場合の文字列であり、条件の定義に照らして誤りです。
ウ: E-D÷C×B+Aは、右の子、自分自身の出力、左の子の順で処理した場合の文字列であり、条件の定義に照らして誤りです。
エ: ED-CB×÷A+は、右の子、左の子、自分自身の出力の順に処理した正しい結果です。