本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成20年度 技術士第一次試験問題【専門科目】

W−2

次のC言語のプログラムでは、2分探索木を用いて探索を行う。(ア)、(イ)に入る正しい組合せを@〜Dの中から選べ。ただし、各ノードの left が指す部分木に格納されている key の値はそのノードの key の値より小さいものとする。

struct node {
  int key;
  struct node *left, * right;
} tree ;

struct node *search(struct node *tree, int key) {
  if (tree == NULL) return NULL;
  if (key == tree->key) return tree;
  if (key < tree->key)
    return     (ア)     ;
  else
    return     (イ)     ;
}

                   

@ search(tree->left)      NULL

A search(tree, key)      search(tree->left, key)

B search(tree->left, key)   search(tree, key)

C search(tree->right, key)   search(tree->left, key)

D search(tree->left, key)   search(tree->right, key)


正解

D


解説

(ア) は、key と 2分木のノードの値を比較して key の方が小さい場合に実行されるため、 題意より left が指す部分木を再帰的に検索する。
従って、search(tree->left, key) が入る。

(イ) は、key と2分木のノードの値を比較して key の方が大きい場合に実行されるため、題意より right が指す部分木を再帰的に検索する。
従って、search(tree->right, key) が入る。

W−1 目次 W−3